【问题标题】:divided key value from list into two value for dictionary将列表中的键值分成两个字典值
【发布时间】:2021-07-02 08:40:45
【问题描述】:

想将 ['2','3'] 中的关键 'b' 值划分为 'b1':'2' ,'b2':'3'对于每组字典

原始编码:

x = [{'a': '1','b': ['2', '3'], 'c': '4'},{'a': '5','b': ['6', '7'],'c': '8'},{'a': '9','b': ['10', '11'],'c': '12'}]

打印(x)

[{'a': '1', 'b': ['2', '3'], 'c': '4'},
{'a': '5', 'b': ['6', '7'], 'c': '8'},
{'a': '9', 'b': ['10', '11'], 'c': '12'}]

预期结果

x = [{'a': '1','b1': '2','b2': '3', 'c': '4'},{'a': '5','b1': '6','b2': '7','c': '8'},{'a': '9','b1': '10','b2': '11','c': '12'}]

打印(x)

[{'a': '1', 'b1': '2', 'b2': '3', 'c': '4'},
{'a': '5', 'b1': '6', 'b2': '7', 'c': '8'},
{'a': '9', 'b1': '10', 'b2': '11', 'c': '12'}]

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: python json dictionary


【解决方案1】:

试试updatezip

[f'b{i}' for i in range(1, len(i['b'])+1)] 将根据列表的长度创建b1, b2 等等。

x = [{'a': '1','b': ['2', '3'], 'c': '4'},{'a': '5','b': ['6', '7'],'c': '8'},{'a': '9','b': ['10', '11'],'c': '12'}]

for d in x:
    d.update(zip([f'b{i}' for i in range(1, len(d['b'])+1)], d['b']))
    del d['b']

print(x)
[{'a': '1', 'c': '4', 'b1': '2', 'b2': '3'}, {'a': '5', 'c': '8', 'b1': '2', 'b2': '3'}, {'a': '9', 'c': '12', 'b1': '2', 'b2': '3'}]

【讨论】:

  • 应该是d['b'] 而不是i['b']
  • 也在range
  • 正确,我实际上保留了我的名字,后来忘记了更改。谢谢指出
【解决方案2】:

自制解决方案,基于旧列表创建新结果列表,而不是更改旧列表。

代码:

x = [{'a': '1','b': ['2', '3'], 'c': '4'},{'a': '5','b': ['6', '7'],'c': '8'},{'a': '9','b': ['10', '11'],'c': '12'}]
result = []
for element in x:
    temp = {}
    for k,v in element.items():
        if k == "b":
            for idx,ele in enumerate(v):
                temp[f"{k}{idx+1}"] = ele
        else:
            temp[k] = v
    result.append(temp)
print(result)

结果:

[{'a': '1', 'b1': '2', 'b2': '3', 'c': '4'}, 
{'a': '5', 'b1': '6', 'b2': '7', 'c': '8'}, 
{'a': '9', 'b1': '10', 'b2': '11', 'c': '12'}]

【讨论】:

  • 有一个解释会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2017-08-05
  • 1970-01-01
相关资源
最近更新 更多