删除超出范围的字典键(python)
如果您有整数字典:删除超出范围的字典键(python),python,loops,dictionary,Python,Loops,Dictionary,如果您有整数字典: d = { 1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4] } 您想: 验证键是否介于0和25之间 删除任何超出范围的密钥,因为它们无效并将破坏数据集 字典键不是自然排序的 给定,如何验证您的密钥是否在所需范围内? 我的尝试:
d = {
1:[0],
2:[1],
3:[0,1,2,3,4],
4:[0],
5:[1],
6:[0,1,2,3,4],
11:[0],
22:[1],
33:[0,1,2,3,4],
44:[0],
55:[1],
66:[0,1,2,3,4]
}
您想:
for x,y in d.items():
if x<0 or x>25:
del d[x]
我该如何补偿呢 在您的示例中,在循环过程中对
d
进行变异
如果不需要更改原始的d
,最简单的方法是使用字典理解:
d = { 1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4] }
new_d = {a:b for a, b in d.items() if a <= 25 and a >= 0}
d={k:v代表k,v在d.items()中如果0您可以使用字典理解:
d = { 1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4] }
new_d = {a:b for a, b in d.items() if a <= 25 and a >= 0}
如果要在迭代时删除键,则需要在副本上迭代,并弹出不符合条件的键:
d = {1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4]}
for k in d.copy(): # or list(d)
if not 0 <= k <= 25:
d.pop(k) # or del d[k]
正如其他人所展示的,重建一本新词典总是一个简单的方法
您可以在此处使用基本的听写理解:
{k: d[k] for k in d if 0 <= k <= 25}
你是说d.items()?@TheClonerx是的,我刚刚意识到:P
d = {1:[0], 2:[1], 3:[0,1,2,3,4], 4:[0], 5:[1], 6:[0,1,2,3,4], 11:[0], 22:[1], 33:[0,1,2,3,4], 44:[0], 55:[1], 66:[0,1,2,3,4]}
for k in d.copy(): # or list(d)
if not 0 <= k <= 25:
d.pop(k) # or del d[k]
{1: [0], 2: [1], 3: [0, 1, 2, 3, 4], 4: [0], 5: [1], 6: [0, 1, 2, 3, 4], 11: [0], 22: [1]}
{k: d[k] for k in d if 0 <= k <= 25}
dict(filter(lambda x: 0 <= x[0] <= 25, d.items()))