【问题标题】:filter/remove values for non existent keys from python defaultdict(list)?从 python defaultdict(list) 过滤/删除不存在的键的值?
【发布时间】:2018-10-25 17:09:25
【问题描述】:

我看到过关于从 defaultdict 中删除/过滤特定键的类似帖子,但是所有这些选项实际上并没有删除空值键对,而只是创建一个没有它们的新字典。这样做,我将无法访问更干净的 defaultdict 的项目。

以下是我的问题的详细信息:

我正在尝试从一个列表中读取多个分子,以便我可以访问它们各自文件中列出的各种属性。我从索引每个分子中的原子开始;作为键,然后附加相应原子的原子序数作为值。为此,我使用 Python 的 defaultdict(list) 来避免 KeyError。

element_list = [1, 6, 7, 8, 9, 15, 16, 17, 35, 53]
element_indices = defaultdict(list)
counter = 0
XX = [some array]
for atm in m.GetAtoms():
    aid = atm.GetIdx()
    do multiple things.......
    element_indices[atm.GetAtomicNum()].append(counter)
    counter +=  1

    for element in element_list:
        XX = np.array([X[i] for i in element_indices[element]])
        print name, ":", element, (element_indices[element])


printing result : 
11bpo : 1 [1, 4, 6, 8, 10, 12]
11bpo : 6 [0, 3, 5, 7, 9, 11]
11bpo : 7 [2, 13]
11bpo : 8 []
11bpo : 9 []
11bpo : 15 []
11bpo : 16 []
11bpo : 17 []
11bpo : 35 []
11bpo : 53 []

由于该分子没有任何 Cl、Br、I 或 O,因此其值为 []。我想删除所有此类事件。

P.S:Python 新手,这是我在 StackOverflow 上的第一篇文章! 谢谢

【问题讨论】:

    标签: python defaultdict


    【解决方案1】:

    只需要做:

    for element in element_list:
        if element in element_indices:
    

    这将忽略每个分子中实际上不存在的所有键值对。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2019-07-13
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 2014-12-07
      相关资源
      最近更新 更多