2015-12-03 110 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

非常感谢! –