2017-05-24 66 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}