Python:如何遍历词典列表并将每个词典作为值添加到具有唯一键的新词典中-无需重复

时间:2019-07-11 13:27:57

标签: python list dictionary append iteration

具有字典列表。我想向每个字典添加密钥,并将它们全部附加到一个字典。我该如何做而又不会重复输入相同的新字典?

我尝试了以下代码:

# 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

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

2 个答案:

答案 0 :(得分:2)

使用您发布的代码-您将获得相同的密钥"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

但是,在您的简单情况下,您可以使用dict理解:

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

答案 1 :(得分:0)

是的,马上就将其修复。

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