Python字典迭代
我有一个dictionaryPython字典迭代,python,dictionary,Python,Dictionary,我有一个dictionarydict2,我想通过它删除idlist中包含特定ID号的所有条目dict2[x]是一个列表列表(参见下面的dict2示例)。这是我到目前为止编写的代码,但是它并没有删除idlist中的所有id实例(entry[1])。有什么帮助吗 dict2 = {G1:[[A, '123456', C, D], [A, '654321', C, D], [A, '456123', C, D], [A, '321654', C, D]]} idlist = ['123456','4
dict2
,我想通过它删除idlist
中包含特定ID号的所有条目dict2[x]
是一个列表列表(参见下面的dict2示例)。这是我到目前为止编写的代码,但是它并没有删除idlist
中的所有id实例(entry[1]
)。有什么帮助吗
dict2 = {G1:[[A, '123456', C, D], [A, '654321', C, D], [A, '456123', C, D], [A, '321654', C, D]]}
idlist = ['123456','456123','321654']
for x in dict2.keys():
for entry in dict2[x]:
if entry[1] in idlist:
dict2[x].remove(entry)
if dict2[x] == []:
del dict2[x]
dict2
的结局应该是这样的:
dict2 = {G1:[[A, '654321', C, D]]}
试试更干净的版本吧
for k in dict2.keys():
dict2[k] = [x for x in dict2[k] if x[1] not in idlist]
if not dict2[k]:
del dict2[k]
使用集合的方法(请注意,我需要将变量A、B、C等更改为字符串,将idlist中的数字更改为实际整数;此外,这仅在ID唯一且不出现在其他“字段”中时有效):
#/usr/bin/env python
#2.6请注意您,所以@marsx在dict2.keys()上迭代是正确的。@benhoyt-您是对的;最初我把它拿了出来,因为我忘记了del
,但后来我把del
放进去,没有把它换回去。:)@Amber我打错了,但是ID号都是字符串。我尝试了你的代码,我得到了这个错误dict2[x]=[x代表dict2[k]中的x如果x[1]不在idlist中]类型错误:列表对象不可损坏
。我不知道这是否有区别,但真正的dict2也包含datetime对象和其他列表。如果出现此错误,您的dict2
在您写的内容之外还有一层嵌套,或者列表中使用了错误的索引。@Amber如果x[1]不在idlist中,它应该是dict2[k]=[x代表dict2[k]
<如果您正在调用列表x
#!/usr/bin/env python
# 2.6 <= python version < 3
original = {
'G1' : [
['A', 123456, 'C', 'D'],
['A', 654321, 'C', 'D'],
['A', 456123, 'C', 'D'],
['A', 321654, 'C', 'D'],
]
}
idlist = [123456, 456123, 321654]
idset = set(idlist)
filtered = dict()
for key, value in original.items():
for quad in value:
# decide membership on whether intersection is empty or not
if not set(quad) & idset:
try:
filtered[key].append(quad)
except KeyError:
filtered[key] = quad
print filtered
# would print:
# {'G1': ['A', 654321, 'C', 'D']}