列表到字典并以所需格式打印

Posted

技术标签:

【中文标题】列表到字典并以所需格式打印【英文标题】:lists to Dictionary and printing in required format 【发布时间】:2020-06-14 10:06:47 【问题描述】:

我有 2 个这样的列表

list1=['TEL', 'TEL', 'TEL', 'US0_STU', 'infocollect feml sfx-infocollect.sh CCR', 'TEL', 'TEL', 'TEL TEL.SYM dbase.mgr maoagent maoagent.SYM sysopt confmem']
listcr=['RA CROXES-23814', 'RA CROXES-23772', 'RA CROXE-16484', 'RA CROXE-16387', 'RA CROXE-16294', 'RA CROXE-16210', 'RA CROXE-16140', 'RA CROXE-16101']

我尝试用下面的代码组成一个字典

mydict = 
k=0
for i in range(len(list1)):

index=i
if list1[i].find(" ")>=0:
    bin_list = list1[i].split(" ") 
    for binary in bin_list:
        mydict.update(k:[binary,listcr[index]])
        k+=1
else:
    mydict.update(k:[list1[i],listcr[index]])
    k+=1
print(mydict)

所以 myDict 是这样的

   mydict=0: ['TEL', 'RA CROXES-23814'], 1: ['TEL', 'RA CROXES-23772'], 2: ['TEL', 'RA CROXE- 16484'], 3: ['US0_STU', 'RA CROXE-16387'], 4: ['infocollect', 'RA CROXE-16294'], 5: ['feml', 'RA CROXE- 16294'], 6: ['sfx-infocollect.sh', 'RA CROXE-16294'], 7: ['CCR', 'RA CROXE-16294'], 8: ['TEL', 'RA CROXE-16210'], 9: ['TEL', 'RA CROXE-16140'], 10: ['TEL', 'RA CROXE-16101'], 11: ['TEL.SYM', 'RA CROXE-16101'], 12: ['dbase.mgr', 'RA CROXE-16101'], 13: ['maoagent', 'RA CROXE-16101'], 14: ['maoagent.SYM', 'RA CROXE-16101'], 15: ['sysopt', 'RA CROXE-16101'], 16: ['confmem', 'RA CROXE- 16101']

在 Django UI 页面中我想显示这样的元素

TEL                 RA CROXES-23814 RA CROXES-23772 RA CROXE- 16484 RA CROXE-16101 RA CROXE-16210 RA CROXE-16140 
US0_STU             RA CROXE-16387
infocollect         RA CROXE-16294
feml                RA CROXE- 16294
sfx-infocollect.sh  RA CROXE-16294
CCR                 RA CROXE-16294
TEL.SYM             RA CROXE-16101
dbase.mgr           RA CROXE-16101
maoagent            RA CROXE-16101
maoagent.SYM        RA CROXE-16101
sysopt              RA CROXE-16101
confmem             RA CROXE-16101

我试过这样

% for key,value in mydict.items %
<p> value.0   value.1 <p>
% endfor %

但对于 TEL Binary,它正在打印:

TEL         RA CROXES-23814
TEL         RA CROXES-23772 
TEL         RA CROXE-16484 
TEL         RA CROXE-16101 
TEL         RA CROXE-16210  
TEL         RA CROXE-16140

【问题讨论】:

【参考方案1】:

您可以使用collections.defaultdict 来构建您的字典:

from collections import defaultdict

my_dict = defaultdict(list)

for k, v in zip(list1, listcr):
    for i in k.split():
        my_dict[i].append(v)

my_dict = k: ' '.join(v) for k, v in my_dict.items()

你的字典将是:

'TEL': 'RA CROXES-23814 RA CROXES-23772 RA CROXE-16484 RA CROXE-16210 RA CROXE-16140 RA CROXE-16101',
 'US0_STU': 'RA CROXE-16387',
 'infocollect': 'RA CROXE-16294',
 'feml': 'RA CROXE-16294',
 'sfx-infocollect.sh': 'RA CROXE-16294',
 'CCR': 'RA CROXE-16294',
 'TEL.SYM': 'RA CROXE-16101',
 'dbase.mgr': 'RA CROXE-16101',
 'maoagent': 'RA CROXE-16101',
 'maoagent.SYM': 'RA CROXE-16101',
 'sysopt': 'RA CROXE-16101',
 'confmem': 'RA CROXE-16101'

对于您的模板:

% for key, value in mydict.items %
    <p> key   value <p>
% endfor %

【讨论】:

【参考方案2】:

您可以在您的代码之后将您的my_dict 分组,如下所示:

output_dict = 
for key, val in mydict.items():
    if val[0] in output_dict:
        output_dict[val[0]].append(val[1])
    else:
        output_dict[val[0]] = [val[1]]

然后像这样在 Jinja 中使用:

% if output_dict %
    % for obj in output_dict.keys() %
         obj 
        % for val_obj in output_dict[obj] %
             val_obj 
        % endfor %
        <br>
    % endfor %
% endif %

【讨论】:

以上是关于列表到字典并以所需格式打印的主要内容,如果未能解决你的问题,请参考以下文章

将列表条目作为值更新为嵌套字典

如何按列对pyspark中的数据框进行分组并以该列作为键并以记录列表作为其值来获取字典?

Unity c#以所需的日期时间格式将date-string转换为datetime对象

以所需格式列出 maven 项目的依赖项

使用pandas DataFrame将字典打印到文件,但更改数据帧格式

将字典列表的 Python 数据框列转换为具有单个元素的列