如何使用理解来减少字典值中的集合?
How to reduce the sets in dict values using comprehension?
我有
x = {'a':set([1]) , 'b':set([2]), 'c':set([3]) }
保证集合中只有一个元素。我需要将其转换为
{'a': 1, 'c': 3, 'b': 2}
以下作品:
x1 = {k:x[k].pop() for k in x.keys()} OR
x1 = {k:next(iter(x[k])) for k in x.keys()}
但我不喜欢它,因为pop()
这里正在修改原始集合。我需要以下帮助。
- 如何在理解范围内将解包用作 mentioned here。
- 有什么办法吗,我可以用
functools.reduce
。
- 总体而言,有什么更好的或 Pythonic 的方法可以做到这一点?
在我看来,最易读的选择是使用 next
和 iter
。 解包可能也没什么用,因为它更像是一种赋值操作。(参见 user2357112 的回答)
简单地说:
>>> {k: next(iter(v)) for k, v in x.items()}
{'a': 1, 'c': 3, 'b': 2}
如果你想通过解包来做到这一点,那就是
{k: item for k, [item] in x.iteritems()}
我有
x = {'a':set([1]) , 'b':set([2]), 'c':set([3]) }
保证集合中只有一个元素。我需要将其转换为
{'a': 1, 'c': 3, 'b': 2}
以下作品:
x1 = {k:x[k].pop() for k in x.keys()} OR
x1 = {k:next(iter(x[k])) for k in x.keys()}
但我不喜欢它,因为pop()
这里正在修改原始集合。我需要以下帮助。
- 如何在理解范围内将解包用作 mentioned here。
- 有什么办法吗,我可以用
functools.reduce
。 - 总体而言,有什么更好的或 Pythonic 的方法可以做到这一点?
在我看来,最易读的选择是使用 next
和 iter
。 解包可能也没什么用,因为它更像是一种赋值操作。(参见 user2357112 的回答)
简单地说:
>>> {k: next(iter(v)) for k, v in x.items()}
{'a': 1, 'c': 3, 'b': 2}
如果你想通过解包来做到这一点,那就是
{k: item for k, [item] in x.iteritems()}