【问题标题】:Iterating through strings inside a list [duplicate]遍历列表中的字符串[重复]
【发布时间】:2015-12-03 00:42:09
【问题描述】:

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

鉴于:

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 dictionary


【解决方案1】:

好的,这里有很多东西搞混了,但你已经很接近了。

首先,不要在python内置函数之后调用东西,比如list

我将逐行分解我的答案,以便您得到这个:

  1. str 将列表转换为字符串,然后尝试拆分它。而是保持列表原样,并在其上使用list comprehension 来拆分列表中的每个字符串。此外,通过使用item.split(',',1),唯一迫使我们只拆分一次,如果项目中有逗号,则可以使用 - 例如Ham, cheese &amp; 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']}

【讨论】:

    【解决方案2】:

    这是一个涉及字典组合的更 Python 的 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}
    

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

    【讨论】:

      【解决方案3】:
      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]
      

      【讨论】:

      • split() 已经生成了一个list。你不需要另一个层次的理解。另外,不要将其命名为dict
      • 非常有帮助!谢谢!
      • 谢谢@TigerhawkT3,修复它。还赞成你的回答:真的很高兴能有更好的方法来做到这一点(我自己还是一个 n00b)。 :) d = {key: value for (key, value) in [(k,v) for k,v in (x.split(",") for x in list)]}
      • @user244255 啊是的!我会试试看 :) 再次感谢!
      猜你喜欢
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2019-10-16
      • 2011-04-17
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多