迭代列表中的字符串

时间:2015-12-03 00:42:09

标签: python dictionary

如何遍历列表中的字符串,以便我可以将特定值添加到字典中?例如,对于给定的列表,我想将每个项目的价格设置为字典键,并将它们各自的项目设置为值。

假设:

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'"}

我做错了什么?

3 个答案:

答案 0 :(得分: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,[])
    
  4. 这是我的完整版本:

    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]

答案 2 :(得分: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}

首先将它们拆分并格式化为产品,然后按价格分组到字典中。