简体   繁体   English

在循环内将项目添加到字典

[英]Adding item to Dictionary within loop

Below data is grasped from webpage and containing entries as below(like a table with many rows):以下数据是从网页中获取的,包含以下条目(如多行表格):

entry1: key1: value1-1, key2: value2-1, key3: value3-1
entry2: key1: value1-2, key2: value2-2, key3: value3-2
entry3: key1: value3-1, key2: value2-3, key3: value3-3
......
entry100: key1: value100-1, key2: value100-2, key3: value100-3

how can I use a dictionary to store this data?如何使用字典来存储这些数据? the data is from a list thus the 'dictionary append' should be done within a loop...数据来自一个列表,因此“字典追加”应该在一个循环中完成......

here is my current solution:这是我目前的解决方案:

case_list = {}
for entry in entries_list:
    case = {'key1': value, 'key2': value, 'key3':value }
    case_list.update(case)

but the case_list in the end only contains the last case entry... Can somebody please help me on this?但最后的case_list只包含最后一个案例条目......有人可以帮我吗? I would expect the case_list containing 100 entries w/o any overwriting among entries, and I will need to store it to DB afterwards.我希望 case_list 包含 100 个条目,而条目之间没有任何覆盖,之后我需要将其存储到 DB。

In your current code, what Dictionary.update() does is that it updates (update means the value is overwritten from the value for same key in passed in dictionary) the keys in current dictionary with the values from the dictionary passed in as the parameter to it (adding any new key:value pairs if existing) .在您当前的代码中, Dictionary.update()所做的是更新(更新意味着该值被字典中传递的相同键的值覆盖)当前字典中的键使用作为参数传入的字典中的值到它(如果存在,添加任何新的键:值对)。 A single flat dictionary does not satisfy your requirement , you either need a list of dictionaries or a dictionary with nested dictionaries.单个平面字典不能满足您的要求,您需要一个字典列表或一个带有嵌套字典的字典。

If you want a list of dictionaries (where each element in the list would be a diciotnary of a entry) then you can make case_list as a list and then append case to it (instead of update) .如果您想要一个字典列表(其中列表中的每个元素都是一个条目的字典),那么您可以将case_list作为一个列表,然后将case附加到它(而不是更新)。

Example -例子 -

case_list = []
for entry in entries_list:
    case = {'key1': entry[0], 'key2': entry[1], 'key3':entry[2] }
    case_list.append(case)

Or you can also have a dictionary of dictionaries with the key of each element in the dictionary being entry1 or entry2 , etc and the value being the corresponding dictionary for that entry.或者你也可以有一个字典字典,字典中每个元素的键是entry1entry2等,值是该条目的相应字典。

case_list = {}
for entry in entries_list:
    case = {'key1': value, 'key2': value, 'key3':value }
    case_list[entryname] = case  #you will need to come up with the logic to get the entryname.

As per my understanding you want data in dictionary as shown below:根据我的理解,您需要字典中的数据,如下所示:

key1: value1-1,value1-2,value1-3....value100-1
key2: value2-1,value2-2,value2-3....value100-2
key3: value3-1,value3-2,value3-2....value100-3

for this you can use list for each dictionary keys:为此,您可以为每个字典键使用列表:

case_list = {}
for entry in entries_list:
    if key in case_list:
        case_list[key1].append(value)
    else:
        case_list[key1] = [value]
# Let's add key:value to a dictionary, the functional way 
# Create your dictionary class 
class my_dictionary(dict): 
    # __init__ function 
    def __init__(self): 
        self = dict()   
    # Function to add key:value 
    def add(self, key, value): 
        self[key] = value 
# Main Function 
dict_obj = my_dictionary() 
limit = int(input("Enter the no of key value pair in a dictionary"))
c=0
while c < limit :   
    dict_obj.key = input("Enter the key: ") 
    dict_obj.value = input("Enter the value: ") 
    dict_obj.add(dict_obj.key, dict_obj.value) 
    c += 1
print(dict_obj) 

Simpler Solution - use copy() instead of directly appending the dict in list更简单的解决方案 - 使用copy()而不是直接将dict添加到list

case_list = []
for entry in entries_list:
    case = {'key1': value, 'key2': value, 'key3':value }
    case_list.append(case.copy())

This will not have any duplicates.这不会有任何重复。

dataL = []
dataMultiple = {}

dataL.append(dataMultiple.copy())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM