我想找到在python中的键中迭代值的最佳方法。在python中通过键迭代字典多个值
我有与结构文件:
17 KEY1
18 KEY1
45 KEY2
78 KEY2
87 KEY2
900 KEY3
92 KEY4
所以我需要第二列作为关键(无重复)和链接设定为对应于它这个密钥的所有值(第一列)。
'KEY1':[ '17', '18']
'KEY2':[ '45', '78', '87']
'KEY3':[” 900 ']
'KEY4':' 92' ]
到现在为止我做不使用词典:
for line in file:
value, key = line.strip().split(None,1)
,然后我可以把它放进字典,
diction.setdefault(key, []).append(value)
所以之后,我有一个很好的解释,因为我需要的。
但之后,我必须重读文件以进行更改。可以在键(对)(添加/删除)中或仅在值(添加/删除)中发生更改如何检查迭代键是否按值进行更改?
UPD ***: 钥匙检查或多或少是明确的:
if diction[key]:
但如何遍历值的键里面? 我需要找到差异,然后从字典中添加\删除此值\ pair(如果键的最后一个值)?
我想这可以用iteritem()\ itervalues()或smthng来完成,但我并不熟悉它。
谢谢你的帮助。
UPD ***
谢谢@乔尔。最后我用了3张支票。首先是添加任何按键:
set_old_dict = set(new_old.keys())
set_new_dict = set(new_dict.keys())
intersect = set_new_dict.intersection(set_old_dict)
def added(self):
return set_new_dict - intersect
def removed(self):
return set_old_dict - intersect
然后,如果我不明白或已经处理这个情况下,我会用你的函数:
def comp(old_dict, new_dict):
for key, old_val in old_dict.items():
new_val = new_dict[key]
print 'evolutions for', key
print 'new content:', [x for x in new_val if x not in old_val]
print 'removed content:', [x for x in old_val if x not in new_val]
每次更新文件时,重新构建整个词典对您来说很重要吗? – nmichaels
实际上,请不要**使用'if diction [key]:',使用'if key in diction:'。 – hochl
如果我将'18 key1'这一行更改为'17 key1',那么'diction ['key1']'是否包含'17'或两个副本?订单是否重要?如果该文件首先是这样的呢? –