从字典中删除特定值
Removing specific values from dictionary
我正在处理与字典和列表相关的问题。
这是我的输入数据
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)],
17: [9, 1492, (30, 43), (1369, 1369)],
20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)],
26: [34, 1364],
27: [300, 1360, (918, 922)],
36: [34, 1364]}
我的objective是删除值列表中仅包含整数数据类型的键值对。 (在这个输入数据中,我想去掉26:[34, 1364]和36:[34, 1364]等数据)。
所以,我的输出看起来像这样
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)],
17: [9, 1492, (30, 43), (1369, 1369)],
20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)],
27: [300, 1360, (918, 922)]}
解决这个问题最有效的方法是什么。
使用字典理解 not isinstance(..., int)
:
{k: v for k, v in dct.items() if any(not isinstance(i, int) for i in v)}
输出:
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)],
17: [9, 1492, (30, 43), (1369, 1369)],
20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)],
27: [300, 1360, (918, 922)]}
使用all
:
data = {k: v for k, v in data.items() if not all(isinstance(x, int) for x in v)}
你可以更奇思妙想,使用 map
和 dunder 方法:
data = {k: v for k, v in data.items() if not all(map(int.__instancecheck__, v))}
我正在处理与字典和列表相关的问题。
这是我的输入数据
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)],
17: [9, 1492, (30, 43), (1369, 1369)],
20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)],
26: [34, 1364],
27: [300, 1360, (918, 922)],
36: [34, 1364]}
我的objective是删除值列表中仅包含整数数据类型的键值对。 (在这个输入数据中,我想去掉26:[34, 1364]和36:[34, 1364]等数据)。
所以,我的输出看起来像这样
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)],
17: [9, 1492, (30, 43), (1369, 1369)],
20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)],
27: [300, 1360, (918, 922)]}
解决这个问题最有效的方法是什么。
使用字典理解 not isinstance(..., int)
:
{k: v for k, v in dct.items() if any(not isinstance(i, int) for i in v)}
输出:
{12: [33, 1231, (40, 41), (299, 304), (564, 569), (1139, 1143), (1226, 1228)],
17: [9, 1492, (30, 43), (1369, 1369)],
20: [9, 1492, (30, 45), (295, 310), (561, 573), (927, 929), (1133, 1148), (1222, 1236), (1354, 1356), (1368, 1369)],
27: [300, 1360, (918, 922)]}
使用all
:
data = {k: v for k, v in data.items() if not all(isinstance(x, int) for x in v)}
你可以更奇思妙想,使用 map
和 dunder 方法:
data = {k: v for k, v in data.items() if not all(map(int.__instancecheck__, v))}