2014-09-19 63 views
2

我無法找到如何在別處做到這一點,但它可能很簡單。我正在嘗試利用與字典strings相關聯的value,但我目前只能實際支持key本身。詞典理解查詢

strings = {"1234":{'a'}, "2":{'as'}, "4":{'bat'}, "5":{'car'}, "6":{'dove'}, "7":{'python'}} 

我知道這是不對的:

d = {key:key.upper() for key in strings} 

這導致了一個錯誤,因爲我試圖解開太多變數:

d = {key:value.upper() for (key,value) in strings} 
+1

你需要'字符串中.items()'。 – jonrsharpe 2014-09-19 14:28:04

回答

4

你的價值觀是一組,被那你想要什麼?

你可以讓他們不套,並讓他們爲字符串,然後使用iteritems:

strings = {"1234":'a', "2":'as', "4":'bat', "5":'car', "6":'dove', "7":'python'} 

{key: value.upper() for key, value in strings.iteritems()} 

或者,如果他們必須集,需要的迭代

strings = {"1234":{'a'}, "2":{'as'}, "4":{'bat'}, "5":{'car'}, "6":{'dove'}, "7":{'python'}} 

{key: {val.upper() for val in value} for key, value in strings.iteritems()} 
2

你的第二個的aditional的層嘗試在正確的軌道上,但是你有兩個問題:要同時迭代鍵和值,你需要items()方法;並且只能通過調用upper來使其不能集中所有元素。你需要在dict理解中嵌套一套理解。

strings = {"1234":{'a'}, "2":{'as'}, "4":{'bat'}, "5":{'car'}, "6":{'dove'}, "7":{'python'}} 

d = {key:{item.upper() for item in value} for (key,value) in strings.items()} 
print d 

結果:

{'1234': set(['A']), '2': set(['AS']), '5': set(['CAR']), '4': set(['BAT']), '7': set(['PYTHON']), '6': set(['DOVE'])} 
0

因爲你的價值是set對象使用str將它們轉換爲字符串,那麼你可以使用該upper方法:

>>> {key: str(value).upper() for key, value in strings.items()} 
{'1234': "SET(['A'])", '2': "SET(['AS'])", '5': "SET(['CAR'])", '4': "SET(['BAT'])", '7': "SET(['PYTHON'])", '6': "SET(['DOVE'])"}