从2D字典中创建值列表,如果它们出现的次数少于一定次数



给定如下格式的字典:

nodes = {1: {'pos': (1, 2), 'other_data': 'N/A'},
2: {'pos': (2, 2), 'other_data': 'N/A'},
3: {'pos': (4, 3), 'other_data': 'N/A'},
4: {'pos': (5, 3), 'other_data': 'N/A'},
5: {'pos': (6, 3), 'other_data': 'N/A'},
6: {'pos': (1, 4), 'other_data': 'N/A'},
7: {'pos': (2, 4), 'other_data': 'N/A'},
8: {'pos': (4, 5), 'other_data': 'N/A'},
9: {'pos': (5, 5), 'other_data': 'N/A'},
10: {'pos': (6, 5), 'other_data': 'N/A'}}

我想创建一个仅包含出现少于3次的位置的Y值的列表或集合。维持秩序并不重要。'other_data'已被包括在内,但为了可读性起见缩短了。

到目前为止,我有这个:

foo = [values.get('pos')[1] for values in nodes.values()]
bar = set(x for x in foo if foo.count(x) < 3)
print(bar)

这确实给了我预期的结果:

{2, 4}

但是我希望找到一种更python化的方法或者只使用一行的方法,因为我现在这样做看起来很笨拙。

您可以从Collections中使用Counter,并将y值列表传递给Counter,然后您可以使用列表推导并仅取计数小于3的键,或者您可以使用filter并过滤掉您不需要的值:

>>> from collections import Counter
>>> [k for k,v in Counter(d['pos'][1] for d in nodes.values()).items() if v<3]
[2, 4]

相关内容

  • 没有找到相关文章

最新更新