【问题标题】:Create list of dictionaries from text lines and duplicate items从文本行和重复项创建字典列表
【发布时间】:2016-06-01 10:35:00
【问题描述】:

卡在一个相对简单的任务上。 有一个文本文件,需要做一个字典列表。如果该行的第一项相同,则其他行的项应属于同一字典。 请查看文本文件和首选结果。

.txt

739883332,amenity,recycling
739883346,amenity,recycling
835250417,payment:maestro,yes
835250417,payment:mastercard,yes
835250417,payment:visa,yes
3259847948,recycling:cans,no
3259847948,recycling:clothes,no

到目前为止,我已经得到了……

for i in line:          
    i=i.strip() 
    i=i.split(',')
    ID=i[0] 
    key=i[1]
    val=i[2]
    dict['ID']=ID
    dict[key]=val

首选结果:

[{'ID':739883332},{'amenity':'recycling'}]
[{'ID':739883346},{'amenity':'recycling'}]
[{'ID':835250417},{'payment:maestro':'yes'},{'payment:mastercard':'yes'},{'payment:visa':'yes'}]
[{'ID':3259847948},{'recycling:cans':'no'},{'recycling:clothes':'no'}]

【问题讨论】:

  • {payment:maestro:yes} 这是无效的语法。字典由键:值对组成。
  • {recycling:cans:no}语法错误,还有dict['nodeID:']=ID,请指正
  • 你是对的,但在我的情况下,它会像 {'payment:maestro':'yes'}

标签: list python-2.7 dictionary


【解决方案1】:

刚刚找到解决办法:

def merge_lists(d1list, d2list, key):
merged = {}
for item in d1list+d2list:
    if item[key] in merged:
        merged[item[key]].update(item)
    else:
        merged[item[key]] = item
return [val for (_, val) in merged.items()]

for i in line:
    dict={}
    i=i.strip() 
    i=i.split(',')
    ID=i[0] 
    key=i[3]
    val=i[4]    
    dict['nodeID:']=ID
    dict[key]=val
    if ID not in list:
        list.append(ID)
        d1list.append(dict)
    else:
        d2list.append(dict)

final_list = merge_lists(d1list, d2list, 'nodeID:') 

感谢代码优化说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2021-03-09
    • 2021-06-25
    • 2018-07-27
    • 2018-09-09
    相关资源
    最近更新 更多