根据嵌套字典对象的值将嵌套字典对象追加到列表中。PYTHON
我在写一段代码,用来显示用户可以选择的对象列表时遇到了一些问题。每个对象都有一个“大小”,每当用户选择一个对象时,这个大小就会从用户可以选择的最大数量中减去。
简单来说,用户一开始可以选择的数量上限是5。每个对象的大小在1到4之间。
当用户第一次选择时,没有任何限制,但之后列表中显示的对象应该限制在用户剩余的可选数量之内。如果用户只剩下2的选择上限,他们就不应该看到大小为3的对象。
到目前为止,我的代码在其他方面都能正常工作,但在设置这些限制方面还存在问题。
set1_items = {
"Option1": {
"Common": [
{"Item Name": "A1", "Size": 3},
{"Item Name": "A2", "Size": 4}
],
"Uncommon": [
{"Item Name": "B1", "Size": 2},
{"Item Name": "B2", "Size": 1}
]
},
"Option2": {
"Common": [
{"Item Name": "C1", "Size": 3},
{"Item Name": "C2", "Size": 1}
],
"Uncommon": [
{"Item Name": "D1", "Size": 2},
{"Item Name": "D2", "Size": 4}
]
}
}
chosen_objects = []
objects_chosen = None
max_amount_limit = 5
selected_objects_size = 0
available_objects_list = []
while objects_chosen is None:
if (max_amount_limit - selected_objects_size) > 3:
available_objects_list = set1_items["Option1"]["Common"]
elif (max_amount_limit - selected_objects_size) <4:
available_objects_list = set1_items["Option1"]["Common"]?????
object_availability = available_objects_list
objects_itr = 0
for i in object_availability:
print(object_itr, end=' - ')
for key, val in i.items():
print(key, ": ", val, end='\n ')
print()
object_itr = object_itr+1
chosen_object_index = input("> ")
chosen_object_index = int(chosen_object_index)
chosen_objects.append(object_availability[chosen_object_index]["Item Name"]
selected_objects_size = selected_objects_size + object_availability[chosen_object_index]["Size"]
if max_amount_limit == selected_objects_size:
objects_chosen = "Done"
else:
continue_object_selection = input("""
You have """+str(int(max_amount_limit - selected_objects_size))+""" amounts left.
Do you want to select more objects from Set 1, or move on to Set 2?
1 - Continue with Set 1
2 - Move on to Set 2
>""")
if continue_object_selection == "1":
objects_chosen is None
elif continue_object_selection == "2":
objects_chosen - "Done"
else:
print("Not a valid choice, try again")
这是我代码的一个基本简化版本,我在需要添加内容的地方加了?????。
如果能提供一些帮助,我将非常感激,因为我找不到关于根据值将嵌套字典项添加到列表的相关资料。
谢谢。
1 个回答
1
你的问题里的示例代码无法运行,但我觉得你主要想知道的是如何过滤一个嵌套的字典。
如果是这样的话,我会使用列表推导式。
filtered = {
option: {
rarity: [
item for item in items
if item["Size"] <= max_amount_limit
]
for rarity, items in options.items()
}
for option, options in set1_items.items()
}
示例:https://trinket.io/python3/5c8666dcce
补充:关于如何过滤稀有度的例子,可以是动态的或者是硬编码的……
filtered = {
option: {
rarity: [
item for item in items
if item["Size"] <= max_amount_limit
]
for rarity, items in options.items()
if rarity == 'Common'
}
for option, options in set1_items.items()
}
或者……
filtered = {
option: [
item for item in options['Common']
if item["Size"] <= max_amount_limit
]
for option, options in set1_items.items()
}