2017-05-24 39 views
2

如何使用理解来减少字典值的集合?

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的方式来做到这一点?
+0

'functools.reduce'有相当多什么与您正在尝试执行的操作有关。 – user2357112

回答

6

如果你想与拆包要做到这一点,那会是

{k: item for k, [item] in x.iteritems()} 
+0

这太棒了!您,先生,我的upvote – SuperSaiyan

+0

这将在'Python 3.5.2'内产生'AttributeError'。 –

+2

@ChihebNexus:的确如此,但问题标签为2.7。 – user2357112

3

在我看来,最可读的办法是使用nextiter 解包也许没有多大用处,因为它更像是一项赋值操作。 (见user2357112的答案)

如何简单:

>>> {k: next(iter(v)) for k, v in x.items()} 
{'a': 1, 'c': 3, 'b': 2}