【问题标题】:Removing specific values from dictionary从字典中删除特定值
【发布时间】:2021-12-05 05:54:50
【问题描述】:

我正在处理与字典和列表相关的问题。

这是我的输入数据

{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]}

我的目标是删除值列表中仅包含整数数据类型的键值对。 (在这个输入数据中,我想去掉 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)]}

解决这个问题最有效的方法是什么。

【问题讨论】:

    标签: python list dictionary list-comprehension


    【解决方案1】:

    使用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))}
    

    【讨论】:

      【解决方案2】:

      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)]}
      

      【讨论】:

      • 很好的德摩根定律演示:)
      • @user2390182 是的 :) 我们的两个答案都有效,但方式不同
      • 几乎相同。两者都会在第一个非整数值上短路。 sum 方法根本没有短路,所以我将其评为二等 ;)
      • 嗨!感谢您的解决方案。
      • @TaarunSrinivas 希望它有效。
      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      相关资源
      最近更新 更多