【问题标题】:Python: How to iterate over a list of dictionaries and add each dictionary as value to a new dictionary with a unique key - no repeatsPython:如何遍历字典列表并将每个字典作为值添加到具有唯一键的新字典中 - 不重复
【发布时间】:2019-11-21 05:47:54
【问题描述】:

有一个字典列表。我想为每个字典添加一个键并将它们全部附加到一个字典中。我如何做到这一点而不会重复相同的条目进入新的字典?

我试过这个代码:

# a_list is a list of dictionaries
# category_name is a string

def make_dict(a_list, category_name=None):

    a_dict = {}

    for item in a_list:
        for i in range(0, len(a_list)):
            a_dict.setdefault(category_name + str(i+1), item)

    return a_dict

但是当它创建一个新名称时,列表中的第一个对象会重复列表中的对象总数。

{
    "Open Port 1": {
        "LocalAddress": "::",
        "LocalPort": 58448,
        "RemoteAddress": "::",
        "RemotePort": 0,
        "State": 100
    },
    "Open Port 2": {
        "LocalAddress": "::",
        "LocalPort": 58448,
        "RemoteAddress": "::",
        "RemotePort": 0,
        "State": 100
    },
    "Open Port 3": {
        "LocalAddress": "::",
        "LocalPort": 58448,
        "RemoteAddress": "::",
        "RemotePort": 0,
        "State": 100
    }, ... etc

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 但是怎么做?? “i”索引在哪里增加?为什么它不总是 0?

标签: python list dictionary append iteration


【解决方案1】:

使用您发布的代码 - 您将获得相同的键 "Open Port 1" 重新分配每个下一个字典,因为计数器 i 不会增加:

i = 0
for item in a_list:
    a_dict.setdefault(category_name + str(i+1), item)
return a_dict

更正的方法是:

i = 0
for item in a_list:
    a_dict.setdefault(category_name + str(i+1), item)
    i += 1
return a_dict

但是,在您的简单情况下,您可能只需要使用字典理解:

a_dict = {category_name + str(i): d for i, d in enumerate(a_list, 1)}

【讨论】:

  • OP 显然没有发布他们使用的代码,所以实际问题可能在其他地方。
【解决方案2】:

是的,马上就修好了。

for item in a_list:
        a_dict[(category_name + str(i))] = item
        i += 1
    return a_dict

【讨论】:

  • 您可以使用enumerate 更加优雅:for i, item in enumerate(a_list): 然后您不必显式增加i
猜你喜欢
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2019-07-15
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多