def getEntries():
# Loop variables, etc
loopNum = 1
setupString = ''
entryData = []
# Loop will go through all our entry boxes in our grid
# For each row, we will get the data and build our string and then append it to
for entry in my_entries:
if loopNum % 5 != 0:
# Update our string
setupString += entry.get() + ' '
else:
setupString += entry.get()
entryData.append(setupString)
#reset our loopstring
setupString = ''
# increment our loopNum
loopNum += 1
print(entryData)
generateScript(entryData)
def generateScript(myList):
fileName = ent_script_name.get()
# Create our nested dictionary
nested_dict = {}
# Loop through our list
for line in myList:
# Specify that we want decimal with 3 percision
decimal.getcontext().prec = 3
# Split our line and get our parts
parts = line.split()
print(parts)
state = parts[0] # Remove trailing comma
amount = int(parts[1])
rate = decimal.Decimal(parts[2])
value = decimal.Decimal(parts[3])
category = parts[4]
print(f'Getting part 4 {parts[4]}')
nested_dict[state] = {
'amount': amount, # highest amount of insurance from rate sheet
'rate': rate, # each add'l factor from rate sheet
'value': value, # factor for amount
'category': category # 'A' or 'H'
}
有两个Python列表,我想将它们添加到嵌套字典中。当我打印出结果字典时,我看到第二个条目,但由于某种原因它跳过了第一个条目
代码的问题在于,你在
generateScript
函数的循环中,为同一个键
state
重复赋值字典。这意味着,只有循环中最后一次迭代的数据会被保留在字典中。
为了解决这个问题,你需要在嵌套字典中为每个
state
创建一个列表,并将每次循环中的数据追加到这个列表中。
以下是修改后的代码:
import decimal
def getEntries():
# ... (保持不变) ...
def generateScript(myList):
# ... (保持不变) ...
# 创建嵌套字典
nested_dict = {}
# 遍历列表
for line in myList:
# ... (保持不变) ...
# 如果 state 已经存在于字典中,将数据追加到列表中
if state in nested_dict:
nested_dict[state].append({
'amount': amount,
'rate': rate,
'value': value,
'category': category
})
# 否则,创建一个新的列表并添加数据
else:
nested_dict[state] = [{
'amount': amount,
'rate': rate,
'value': value,
'category': category
}]
# 打印字典以进行调试
print(nested_dict)
解释:
-
我们首先检查
state
是否已经作为键存在于nested_dict
中。 -
如果存在,我们获取该
state
对应的列表,并使用append()
方法将新的数据字典添加到列表中。 - 如果不存在,我们创建一个新的列表,并将包含数据的字典作为第一个元素添加到列表中。
这样,每个
state
都会对应一个包含多个字典的列表,每个字典代表一行数据。