如何为字典中的相同键生成不同的值?

时间:2019-07-10 22:05:11

标签: python json python-3.x dictionary

我是新手,无法终生解决! 尝试获取具有以下结构的python字典,并列出字典:

json_data = [ {"id": 1,"name": "Meghan"},
        {"id": 2,"name": "Julia"},
        {"id": 3,"name": "Kevin"}
        ]

每个词典中我都需要相同的键,并且id的值必须从1到100。如果可能的话,我想动态填充它。

这是我到目前为止尝试过的:

json_data = {}
for i in range(1, 11):
    if i not in json_data:
        json_data['id'] = i

但是,正如您所看到的,id不断被覆盖并生成如下文件:

{
    "id": 10
}

任何在正确方向上的帮助都将很棒!

4 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

json_data = []
for i in range(1, 11):
    json_data.append({'id': i})

结果:

[{'id': 1},
 {'id': 2},
 {'id': 3},
 {'id': 4},
 {'id': 5},
 {'id': 6},
 {'id': 7},
 {'id': 8},
 {'id': 9},
 {'id': 10}]

答案 1 :(得分:1)

当前代码有两个错误步骤:

  1. if i not in json_data行仅查看元素 而不是字典中id键的值。
  2. json_data['id'] = i行覆盖了字典列表, 带有相同变量名json_data的字典。

下面的代码将解决这两个错误步骤。

json_data = [ {"id": 1,"name": "Meghan"},
        {"id": 2,"name": "Julia"},
        {"id": 3,"name": "Kevin"}
        ]

for i in range(1, 11):
  if i not in [d['id'] for d in json_data]:
    json_data.append({"id": i})

如果在运行上面的代码后要打印json_data列表,它将输出以下内容:

[{'id': 1, 'name': 'Meghan'}, {'id': 2, 'name': 'Julia'}, {'id': 3, 'name': 'Kevin'}, {'id': 4}, {'id': 5}, {'id': 6}, {'id': 7}, {'id': 8}, {'id': 9}, {'id': 10}]

答案 2 :(得分:0)

我不确定您要问什么。

如果要在不复制ID的情况下将ID添加到现有列表:

JSON不会保留其顺序,因此执行此操作的唯一方法是首先遍历列表,找到当前存在的最大ID,然后从那里开始计数。如果您知道永远不会从列表中删除元素,则可以使用列表的长度作为起始索引。或者,您可以使用GUID,该GUID被复制的可能性极低。

如果是有关项目未添加到列表中的:

将json_data的声明更改为:json_data = [],然后使用json_data += [{'id': i}]

答案 3 :(得分:0)

我认为您的问题可能是您忘记将其放在列表中:

    json_data = [{"id": i} for i in range(1, 11)]