【问题标题】:Modify keys and values of a dict in a list of dicts (python 3)修改字典列表中字典的键和值(python 3)
【发布时间】:2021-10-24 10:51:57
【问题描述】:

我有一个 csv 文件(不可编辑),如下所示:

fruit,price,amount
apple,1,2
banana,3,4
kiwi,5,6

我读到了一个字典列表:

goodies = []
with open(blabla) as file:
    reader = csv.DictReader(file)
    for fruit in file:
        goodies.append(fruit)

看起来像这样:

goodies = [{'fruit' : 'apple', 'price' : '1', 'amount':'2'}, {'fruit' : 'banana', 'price' : '3', 'amount':'4'}, {'fruit' : 'kiwi', 'price' : '5', 'amount':'6'}]

我真正需要的:

fruit = [{'apple': [1, 2]}, {'banana': [3, 4]}, {'kiwi': [5, 6]}]

目标是能够将这些值与另一个值列表进行比较并接收它所指的水果,有点像:

check = [5, 6]
# compare with all fruit
Output: kiwi

我不知道我是否可以更好地阅读该文件,或者以后必须以某种方式对其进行修复,因此我们将不胜感激。

我尝试过的:

  1. 使用好东西创建一个新列表(不知道为什么这不会格式化为代码,对不起!)

    水果 = [] 对于我在范围内(len(goodies)): f = list(goodies[i].values()) 水果.append(f)

导致:

[['apple', '1', '2'], ['banana', '3', '4'], ['kiwi', '5','6']]
  1. 采用上述方法并尝试一个元组:

    fruit01 = {tuple(sub[:1]): tuple(sub[1:]) for sub in fruit}

导致(为什么有那些有趣的逗号?):

{('apple',):('1','2'), ('banana',):('3','4'), ('kiwi',):('5','6')}

免责声明:这是我第一次遇到 python 和第一个问题,如果我做错了,请让我知道 :)

【问题讨论】:

  • 你的输入文件是什么样的?
  • 刚刚在顶部编辑过

标签: python-3.x list dictionary


【解决方案1】:

使用一些字典创建:

goodies = []
with open(blabla) as file:
    reader = csv.DictReader(file)
    for fruit in file:
        goodies.append({fruit['fruit']: [fruit[x] for x in fruit if x != 'fruit']})

【讨论】:

  • 是的!差不多好了!我可能应该提到,虽然我将 csv 文件作为命令行参数,并且可以给我另一个文件,这几乎是相同的,除了更多列(顶行看起来有点像“fruit, crates ,amount,isle,price"), 那么有没有办法在不硬编码的情况下做同样的事情呢?有没有办法将数字保留为整数,将单词保留为字符串?
  • @cookies 编辑了我的答案
猜你喜欢
  • 2019-07-18
  • 2016-09-30
  • 2019-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多