【问题标题】:How to create a for loop to add elements in dictionaries in python?如何创建一个for循环来在python的字典中添加元素?
【发布时间】:2021-10-17 20:33:12
【问题描述】:

我正在学习 python,目前正在学习字典和链图。下面是我的代码-

import collections

def dict1():
global dt1
dt1 = {}
r1 = int(input("Enter size of dictionary:"))
for i in range(r1):
    c = input("Enter key name:")
    b = input("Enter key value:")
    dt1[c] = b
print(dt1)

def dict2():
global dt2
dt2 = {}
r2 = int(input("Enter size of dictionary:"))
for j in range(r2):
    z = input("Enter key name:")
    y = input("Enter value:")
    dt2[z] = y
print(dt2)


def main():
dict1()
dict2()
chain = collections.ChainMap(dt1, dt2)
print(chain.maps, '\n')

if __name__=="__main__":
main()

我想问是否有一种方法可以创建一个“for”循环,以便根据用户要求创建尽可能多的字典,然后一次一个或一个全部将它们全部添加到 ChainMap。

【问题讨论】:

  • 代替多个全局变量 "dt1", "dt2",... 您可以将列表存储在一个全局变量中并向其附加新的字典。
  • 您需要的只是一个根据用户输入创建字典的函数,而不是多个函数和全局变量。然后调用该函数两次以在 main 中创建 dt1 和 dt2,即dt1 = create_dict(); dt2 = create_dict()

标签: python python-3.x loops dictionary collections


【解决方案1】:

您可以像下面的代码一样使用listappend 而不是collections

def crt_dict():
    dt2 = {}
    r2 = int(input("Enter size of dictionary:"))
    for j in range(r2):
        z = input("Enter key name:")
        y = input("Enter value:")
        dt2[z] = y
    return dt2


def main():
    chain = list()
    r = int(input("Enter num of dictionary:"))
    for i in range(r):
        chain.append(crt_dict())
    print(chain, '\n')

if __name__=="__main__":
    main()

输出:

【讨论】:

  • 但是,发帖人要求chainmap,这与字典列表不同。
【解决方案2】:

首先,如果没有必要,创建全局变量(例如常量)并不是一件好事。然后,在文档的帮助下,有一个名为 new_child() 的函数将新字典添加到链图。

有了这些知识,您应该能够执行正常的 for 循环。在循环之前,您定义链图,然后根据需要添加任意数量的字典。

类似:

# how many dictionaries
count = int(input("Number of dictionaries"))

# init empty chainmap
my_chainmap = collections.ChainMap()

# loop 'count' times
for i in range(count):
    new_dict = {}
    r = int(input("Enter size of dictionary:"))
    for i in range(r):
        c = input("Enter key name:")
        v = input("Enter key value:")
        new_dict[c] = b
    my_chainmap.new_child(new_dict)
    print(new_dict)

【讨论】:

  • 是否有可能不是声明字典的数量,而是询问用户是否要创建一个新的,并且每次用户选择是或 Y 时,然后创建字典以将其添加到链图中?
  • 如何更改 while 循环后创建的字典的名称,以便它们都有唯一的名称?
  • 您实际上不需要使名称不同。如果您在链图中添加不同的字典,则链图中没有它们名称的信息。它只存储字典的值,而不是变量。您可以在此处阅读更多相关信息:geeksforgeeks.org/chainmap-in-python
  • 我得到 ChainMap({'name': 'mnbo', 'roll': '12'}, {'name': 'abcd'}, {}) 作为输出 如何删除最后一个空{}?
  • 我不太确定你的代码在这个阶段是什么样子的。您绝对应该看看为什么最后一个字典会添加到您的代码中?试着找出它来自哪里? for/while 循环的最后一个循环是做什么的?祝你好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 2012-06-16
  • 1970-01-01
相关资源
最近更新 更多