我在编写一些代码来显示用户可以从中选择的对象列表时遇到了问题。每个对象都有一个给定的“大小”,每次选择一个对象时,都会从用户可以选择的最大允许对象数量中减去该大小。
基本上,用户的起始金额限制为 5。 每个对象的大小范围为 1 到 4。
当用户第一次进行选择时,没有任何限制,但之后,列表应显示的内容仅限于剩余数量以下的对象,因此他们不应该看到任何“大小”为3的对象,如果他们的数量限制仅剩 2 个。
到目前为止,我现有的代码适用于所有情况,除了设置这些限制。
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")
这是我的代码的基本精简版本,我添加了 ??????代码需要更多东西的地方。
任何帮助将不胜感激,因为我无法找到有关根据嵌套字典项的值将其附加到列表的任何内容。
谢谢你。
您问题的示例代码无法运行,但我认为您唯一要问的是如何过滤嵌套字典。
如果是这样,我会使用推导式。
filtered = {
option: {
rarity: [
item for item in items]
if item["Size"] <= max_amount_limit
]
}
for option, options in set1_items.items()
for rarity, items in options.items()
}