繁体   English   中英

如何从 Dicts 列表中创建 Dicts,其中键从列表中的 Dict Keys 中缩回,同时保持不同的值

[英]How to create a Dicts From a List of Dicts which the Keys are retracted from Dict Keys inside the list while keeping different values

我这里有这个列表:

mechs= [
        {
            'type_code': 'GAT',
            'name': 'STRIKE',
            'unit_price': 3500,
            'minimum_kilo': 500,
        },
        {
            'type_code': 'GAT',
            'name': 'BLITZ',
            'unit_price': 2500,
            'minimum_kilo': 520,
        },
        {
            'type_code': 'ZGMF',
            'name': 'LEGEND',
            'unit_price': 4500,
            'minimum_kilo': 550,
        },
    ]

然后我希望 output 是这样的:

mechas=
{'GAT': {
[
{'type_code': 'GAT',
  'name': 'STRIKE',
  'unit_price': 3500,
  'minimum_kilo': 500},
{'type_code': 'GAT',
  'name': 'BLITZ',
  'unit_price': 2500,
  'minimum_kilo': 520}
]
}

#continue to next dict...

如何让“GAT”字典将下一个值(字典)放入字典而不是重新分配它们?

这是我用过的:

mechas={}
for i in mechs:
    mechas[i['type_code']]=i

而 output 是这样的:

{'GAT': {'type_code': 'GAT',
  'name': 'BLITZ',
  'unit_price': 2500,
  'minimum_kilo': 520},
 'ZGMF': {'type_code': 'ZGMF',
  'name': 'LEGEND',
  'unit_price': 4500,
  'minimum_kilo': 550}}

这个 output 不包括以前的值(代码 GAT 名称 STRIKE),那么如何保留它而不是重新分配一个新值?

我其实试过list(), append()等,但是我觉得放在这里太长了,结果还是不能让我满意。

a={}
for i in mechs:
    type_code=i.get('type_code')
    if type_code not in a.keys():
        a[type_code]=i
    else:
        c=[a.get(type_code),i]
        a[type_code]=c

上面的代码是如何工作的?下面是解释:

  • 刚刚检查了type_code的键是否在dict中可用。
  • 如果它不可用,则创建一个新的键type_code及其值作为我们正在读取的索引。
  • 如果可用,则将所有值取到相应的type_code并将它们添加到列表中,并将索引值添加到列表中。 然后用新创建的列表更改type_code的先前值。

那应该有用

mechas={}
for i in mechs:
  if i['type_code'] not in mechas:
    mechas[i['type_code']]=[]
  mechas[i['type_code']].append(i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM