【问题标题】:How to generate different values for same key in dictionaries?如何为字典中的相同键生成不同的值?
【发布时间】:2019-07-10 22:05:11
【问题描述】:

我是新手,我一辈子都想不通! 尝试获取具有以下结构的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
}

对正确方向的任何帮助都会很棒!

【问题讨论】:

  • 你想要的结果是什么?请edit您的问题并添加对期望输出的描述。

标签: python json python-3.x dictionary


【解决方案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}]

【讨论】:

    【解决方案2】:

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

    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}]
    

    【讨论】:

      【解决方案3】:

      我不确定你在问什么。

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

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-02-10
          • 2019-05-11
          • 2019-08-18
          • 1970-01-01
          • 2019-10-05
          • 1970-01-01
          • 2014-02-26
          • 1970-01-01
          • 2023-03-26
          相关资源
          最近更新 更多