2015-12-03 144 views
1

如何遍歷列表中的字符串,以便可以將特定值添加到字典中?例如,對於給定的列表,我想將每個項目的價格設置爲字典鍵和它們各自的項目作爲值。遍歷列表中的字符串

考慮:

list = ["10.99,cheese pizza", "4.99,vanilla milkshake", "4.99,chocolate milkshake"] 

輸出(給定一個空字典):

{"10.99": ["cheese pizza"], "4.99": ["vanilla milkshake", "chocolate milkshake"]} 

這裏是我的嘗試:

list = ["10.99,cheese pizza", "4.99,vanilla milkshake", "4.99,chocolate milkshake"] 

list = str(list)[1:-1].split(",") 
listofitems = {} 

ctr = 0 
while ctr < len(list): 
    listofitems[list[0]] = str(list[ctr]) 
    print listofitems 
    ctr = ctr + 1 

我的輸出是這樣的:

{"'10.99": "'10.99"} 
{"'10.99": "cheese pizza'"} 
{"'10.99": " '4.99"} 
{"'10.99": "vanilla milkshake'"} 
{"'10.99": " '4.99"} 
{"'10.99": "chocolate milkshake'"} 

我在做什麼錯?

+0

這不會是一個有效的字典。字典中只能有一個鍵。 – Zizouz212

回答

3

好吧,你有很多事情在這裏混淆,但你很接近。

首先,不要在Python內建插件之後調用東西,如list

我會打破我的回答下來一行行,所以你可以得到這樣的:

  1. str列表轉換爲字符串,然後嘗試劈裂它。請保持原樣,並使用list comprehension來分割列表中的每個字符串。此外,通過使用item.split(',',1),只會迫使我們僅分割一次,如果某個項目中有逗號(例如Ham, cheese & tomato pizza),則手頭只會分割一次。

    list = str(list)[1:-1].split(",") 
    items = [item.split(',',1) for item in items] 
    
  2. 使用for循環,而不是一個while因爲你知道你的名單將循環結束了。另外,因爲每個項目都是一對項目,我們甚至可以解壓他們在for循環:

    for price,item in items: 
    
  3. 使用Dict.get安全地獲得或者與該鍵的項目,默認的,如果它不存在:

    price_set = item_dict.get(price,[]) 
    

這裏是我的完整版:

items = ["10.99,cheese pizza", "4.99,vanilla milkshake", "4.99,chocolate milkshake"] 

items = [item.split(',',1) for item in items] 

item_dict = {} 

for price,item in items: 
    price_set = item_dict.get(price,[]) 
    item_dict[price] = price_set + [item] 

print item_dict 

這個輸出:

{'10.99': ['cheese pizza'], '4.99': ['vanilla milkshake', 'chocolate milkshake']} 
+1

非常感謝! –

2
l = ["10.99,cheese pizza", "4.99,vanilla milkshake", "4.99,chocolate milkshake"] 
d = {} 
for e in l: 
    k,v = e.split(",") 
    if d.has_key(k): 
     d[k] += [v] 
    else: 
     d[k] = [v] 
+0

'split()'已經產生了一個'list'。你不需要另一個層次的理解。另外,不要將它命名爲「dict」。 – TigerhawkT3

+0

非常有幫助!謝謝! –

+0

謝謝@ TigerhawkT3修復它。還高舉你的答案:真的很高興能有更好的方式來做到這一點(我自己還是一個n00b)。 :) d = {key:[(k,v)爲k,v in(x.split(「,」)爲列表中的x)中的(key,value)的值)]} – user244255

2

這是一個更pythonic 2班輪涉及字典組成。

l = ["10.99,cheese pizza", "4.99,vanilla milkshake", "4.99,chocolate milkshake"] 

products = [item.split(',') for item in l] 
output = {y[0]:[x[1] for x in products if x[0] == y[0]] for y in products} 

它首先將它們分割並格式化爲產品,然後按價格分組到字典中。

+0

非常感謝! –