如何遍历列表中的字符串,以便将特定值添加到字典中?例如,对于给定的列表,我想将每个项目的价格设置为字典键,将它们各自的项目设置为值。
给定:
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'"}
我做错了什么?
好吧,你这里有很多东西很困惑,但你已经很接近了。
首先,不要在 python 内置函数之后调用东西,比如 list
。
我会逐行分解我的答案,这样您就可以得到:
str
将列表转换为字符串,然后您尝试拆分它。而是保持列表不变,并使用 list comprehension在它上面拆分列表中的每个字符串。此外,通过使用 item.split(',',1)
唯一强制我们只拆分一次,如果项目中有逗号 - 例如 Ham, cheese &番茄披萨
。
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']}