2016-04-24 23 views
1

我有這樣一本字典:如何從只有一個項目的按鍵中移除括號?

d = {1: ['a', 'b', 'c'], 2: ['d'], 3: ['e','f'], 4: ['g'], 5: ['h', 'i']} 

我想返回字典這樣的:

d = {1: ['a', 'b', 'c'], 2:'d', 3: ['e', 'f'], 4: 'g', 5: ['h', 'i']} 

到目前爲止我有:

for values in d.values(): 
    if len(values) == 1: 
     ?strip []? 
+3

你已經有了答案了,所以我就補充一點:使這一變化,實際上使你的數據結構很難使用,因爲你必須決定哪些方法來處理它。除非你只是爲了打印目的而這樣做,否則這是一個壞主意。 –

+2

添加到@Austin所說的內容......考慮到列表和字符串都是可迭代的,所以消耗第一個字典列表的顯而易見的方法---遍歷它們的元素---對字符串也是一個非常有效的操作_偶爾會出現在他們的位置。雖然對字符串的單個字符進行操作可能不是您的目標,但它甚至不會產生Python的警告。輸出結果可能不正確,但似乎合理,實際上它比錯誤地看起來更明顯。 –

+0

爲了進一步提高Austin和Kevin的說法:由於Python在列表和字符串之間區分通常非常困難,所以您希望字典中的值的方式會使得難以正確編寫後續代碼,因爲它然後必須以不同的方式處理兩種可能的數據類型,假設它可以區分它們 - 因此,做你想做的事情可能是不明智的。 – martineau

回答

1

你似乎對付列表,而不是字符串,因爲您的dict中的值。因此,剝離將不起作用(即使它在語法上是正確的)。然而,可以將該值簡單地設置爲list的第一個元素:

for k in d: 
    if len(d[k]) == 1: 
     d[k] = d[k][0] 

托架[]僅僅是底層類型list的表象特徵。

+0

謝謝。當我將字典合併在一起時,問題就出現了。合併的字典爲每個鍵創建一個列表。有沒有一種方法可以合併字典,而不必爲只有一個值的鍵創建對象類型列表? – Cainster

+0

@Cainster這讓我覺得這是一個截然不同的話題,應該把它作爲一個單獨的問題發佈......假設它不在Stack Overflow的某處。 –

+0

您可以使用['for k,v in d.items():...'](https://docs.python.org/3/library/stdtypes.html)來代替使​​用'd [k] #dict.items) – RoadieRich

1

試試這個

d = {1: ['a', 'b', 'c'], 2: ['d'], 3: ['e','f'], 4: ['g'], 5: ['h', 'i']} 
f= lambda x: x[0] if len(x)==1 else x 
{i:f(d[i]) for i in d} 
+0

歡迎來到Stack Overflow,感謝您的提交!請您花些時間來解釋您的解決方案如何工作?對於可能遇到相同問題的用戶來說,這將會有所幫助。 – gariepy

+0

對不起。多數民衆贊成真正的即時新聞這裏..試圖得到一些信譽,因爲我的問題)所以,第二行是[lambda函數](https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions)看看這裏...適合小邏輯。第3行用每個字典元素調用lambda函數來製作字典。看看[這裏](https://www.python.org/dev/peps/pep-0274/) – Matroskin

+1

這裏不需要使用lambda或'd [i]':'{k:v [0 ] if len(v)== 1 else v for k,v in d.items()}'。看到https://docs.python.org/3/library/stdtypes.html#dict.items – RoadieRich

相關問題