如何遍历列表中的字符串,以便我可以将特定值添加到字典中?例如,对于给定的列表,我想将每个项目的价格设置为字典键,并将它们各自的项目设置为值。
假设:
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 :(得分:3)
好的,你在这里遇到了很多混乱的事情,但你已经很近了。
首先,不要在python内置函数之后调用内容,例如list
。
我会逐行打破我的回答,这样你就可以得到这个:
str
将列表转换为字符串,然后尝试将其拆分。而是将列表保持原样,并使用list comprehension来分割列表中的每个字符串。此外,使用item.split(',',1)
只会强制我们只拆分一次,如果某个项目有逗号,则会出现这种情况 - 例如Ham, cheese & tomato pizza
。
list = str(list)[1:-1].split(",")
items = [item.split(',',1) for item in items]
使用for
循环,而不是while
因为您知道要循环的列表。此外,由于每个项目都是一对项目,我们甚至可以在for循环中解压缩:
for price,item in items:
使用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]
答案 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}
首先将它们拆分并格式化为产品,然后按价格分组到字典中。