使用 python 中的键和值列表迭代字典
Iteration of dict with key and List of values in python
我在 python 中有字典,键为 'string',值为整数列表。用键和值迭代字典,如果不满足某些条件,则删除列表中的值。
迭代不正确。
例如,
my_dict = {"emp_id":[100,200]}
for emp,ids in my_dict.iteritems():
print "Emp :",emp
for id in ids:
print "Id :",id
if not id > 1000:
my_dict.get(emp).remove(id)
continue
输出:
Emp : emp_id
Id : 100
它不会迭代列表中的第二个值 (200)。不确定可能是什么问题。
是不是因为dict中的值被删除了。
如何解决这个问题。我们是否需要复制到另一个对象并从中删除。
迭代时修改my_dict不好
如果你只想打印:not (id > 1000),然后删除 my_dict.get(emp).remove(id).
否则,先删除再打印。
你不应该在迭代过程中删除元素
my_dict={'emp_id': [100, 200, 10000]}
new_dict={ emp:[ele for ele in ids if ele <= 1000] for emp,ids in my_dict.iteritems() }
{'emp_id': [100, 200]}
您无法可靠地修改正在迭代的列表。只需过滤列表,然后将其替换为过滤后的副本。
for emp, ids in mydict.iteritems():
print "Emp:", emp
new_ids = []
for id in ids:
print "Id", id
if id > 1000:
new_ids.append(id)
my_dict[emp] = new_ids
如果您没有像看到的那样打印每个 id,则可以通过调用 filter
:
来替换内部循环
for emp, ids in my_dict.iteritems():
my_dict[emp] = [id for id in ids if id > 1000]
# my_dict[emp] = filter(lambda x: x > 1000, ids)
您甚至可以从头开始重建整个 dict
:
my_dict = {emp: [id for id in ids if id > 1000] for emp, ids in my_dict.iteritems()}
我在 python 中有字典,键为 'string',值为整数列表。用键和值迭代字典,如果不满足某些条件,则删除列表中的值。 迭代不正确。
例如,
my_dict = {"emp_id":[100,200]}
for emp,ids in my_dict.iteritems():
print "Emp :",emp
for id in ids:
print "Id :",id
if not id > 1000:
my_dict.get(emp).remove(id)
continue
输出:
Emp : emp_id
Id : 100
它不会迭代列表中的第二个值 (200)。不确定可能是什么问题。 是不是因为dict中的值被删除了。
如何解决这个问题。我们是否需要复制到另一个对象并从中删除。
迭代时修改my_dict不好
如果你只想打印:not (id > 1000),然后删除 my_dict.get(emp).remove(id).
否则,先删除再打印。
你不应该在迭代过程中删除元素
my_dict={'emp_id': [100, 200, 10000]}
new_dict={ emp:[ele for ele in ids if ele <= 1000] for emp,ids in my_dict.iteritems() }
{'emp_id': [100, 200]}
您无法可靠地修改正在迭代的列表。只需过滤列表,然后将其替换为过滤后的副本。
for emp, ids in mydict.iteritems():
print "Emp:", emp
new_ids = []
for id in ids:
print "Id", id
if id > 1000:
new_ids.append(id)
my_dict[emp] = new_ids
如果您没有像看到的那样打印每个 id,则可以通过调用 filter
:
for emp, ids in my_dict.iteritems():
my_dict[emp] = [id for id in ids if id > 1000]
# my_dict[emp] = filter(lambda x: x > 1000, ids)
您甚至可以从头开始重建整个 dict
:
my_dict = {emp: [id for id in ids if id > 1000] for emp, ids in my_dict.iteritems()}