列表到字典并以所需格式打印
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对象