python - 动态填充字典
问题描述
尝试使用嵌套字典.... 从用户那里获取关于他有多少输入项的输入(他输入一个否),对于每个项目,代码要求他输入两个数字,代码将告诉输入的编号范围内的最大和最小数字...
PFB 代码:
def how_many_sets():
global set_nos_list
set_nos_list = []
defaults = {"range": [], "items": [], "largest": 0, "lowest": 0, "difference": 0}
global set_no
set_no = int(input('How many sets?'))
if set_no < 1 or set_no > 10:
print('error')
else:
for num in range(set_no):
set_nos_list.append(num)
print(set_nos_list)
global set_dict
set_dict = dict.fromkeys(set_nos_list, defaults)
return set_no
def take_sets():
for item in set_nos_list:
list_per_pair = list(map(int, input().split()))
if len(list_per_pair) != 2:
print('There is an error in the no of items, For finding the range two items should be there in a list')
return
elif (list_per_pair[0] < 2) or (list_per_pair[1] > 1000000) or (list_per_pair[0] > list_per_pair[1]):
print(' error')
return
else:
print(item)
set_dict[item]["range"] = list_per_pair
temp_item_list = []
for value in range(list_per_pair[0], list_per_pair[1] + 1):
# print(value)
temp_item_list.append(value)
print(temp_item_list)
#set_dict[num]['items'] = temp_item_list
print(set_dict)
def main():
how_many_sets()
take_sets()
# Write code here
main()
该行set_dict[item]["range"] = list_per_pair
给了我一个错误,尽管循环正在迭代所有值,但 set_dict 仅使用最后一个项目值更新......
How many sets?2
[0, 1]
3 6
0
[3, 4, 5, 6]
4 7
1
[4, 5, 6, 7]
{0: {'range': [3, 6], 'items': [], 'largest': 0, 'lowest': 0, 'difference': 0}, 1: {'range': [4, 7], 'items': [], 'largest': 0, 'lowest': 0, 'difference': 0}}
我想输出这样的东西:
{0: {'range': [4, 7], 'items': [], 'largest': 0, 'lowest': 0, 'difference': 0}, 1: {'range': [4, 7], 'items': [], 'largest': 0, 'lowest': 0, 'difference': 0}}
解决方案
From Initialize dict with values
, you may change to something like
set_dict = {num: {**defaults} for num in range(set_no)}
Then avoid as possible global
variables, prefer returning values frmo method and passing parameters
def how_many_sets():
defaults = {"range": [], "items": [], "largest": 0, "lowest": 0, "difference": 0}
set_no = int(input('How many sets? '))
while set_no < 1 or set_no > 10:
print('Amount set error')
set_no = int(input('How many sets? '))
return {num: {**defaults} for num in range(set_no)}
def take_sets(dict_structure):
for item in dict_structure:
list_per_pair = list(map(int, input("Gives values: ").split()))
if len(list_per_pair) != 2:
print('There is an error in the no of items, For finding the range two items should be there in a list')
return
elif (list_per_pair[0] < 2) or (list_per_pair[1] > 1000000) or (list_per_pair[0] > list_per_pair[1]):
print('Bound Error')
return
else:
dict_structure[item]["range"] = list_per_pair
dict_structure[item]['items'] = list(range(list_per_pair[0], list_per_pair[1] + 1))
print(dict_structure)
def main():
dict_structure = how_many_sets()
take_sets(dict_structure)
main()
Example
How many sets? 4
Gives values: 4 6
Gives values: 3 7
Gives values: 7 8
Gives values: 4 6
{0: {'range': [4, 6], 'items': [4, 5, 6], 'largest': 0, 'lowest': 0, 'difference': 0},
1: {'range': [3, 7], 'items': [3, 4, 5, 6, 7], 'largest': 0, 'lowest': 0, 'difference': 0},
2: {'range': [7, 8], 'items': [7, 8], 'largest': 0, 'lowest': 0, 'difference': 0},
3: {'range': [4, 6], 'items': [4, 5, 6], 'largest': 0, 'lowest': 0, 'difference': 0}}
推荐阅读
- c++ - 迭代器的 Range TS 和 C++20 概念是否需要使用 `operator->` 的能力?
- javascript - onload 和 window.onload 在 IE 中不起作用
- javascript - 使用 javascript 对象的位置变量来查找相关属性
- c# - 如何将多维数组转换为字典?
- visual-studio-2010 - TFS 签入列表仅显示修改的文件,但不显示新创建的文件
- timeout - Spring Boot - 504 网关超时
- django - 将 Django 过滤器集应用于带注释的查询集?
- database - 验证保存的 MongoDB 记录
- azure - Azure 移动应用服务 APIkey
- angular - @Host 和 @Self 在角度上有什么区别?