根据字典列表中的值将字典添加到新列表

问题描述 投票:0回答:1

我有一个包含各种项目的字典列表,例如“版本 ID”和“找到的扇区”。我正在尝试编写一个程序来根据用户在从字典列表中的嵌套项目集中选取值时所做的选择来显示字典。

理想情况下,我希望用户能够选择版本、扇区和时间,然后程序应填充与所选条件匹配的项目列表,然后随机选择并显示其中一个项目给用户。

import random from randint selected_version = "Version 1" selected_sector = "Sector One" selected_time = "Daylight" selected_item = None item_one = { "Version ID": ["v.1"], "Name": "Item One", "Sector Found": {"Sector 1": {"Daylight": 100}} def item_locator(version, sector, time): available_items = [] time_items = [] time_items.append(item_one) if version == "Version 1": if sector == "Sector One": if time == "Daylight": for i in time_items: for k, v in i: if k == "Daylight": available_items.extend([i] * v) item_choice = randint(0, 99) selected_item = available_items.index(item_choice) return selected_item item_locator(selected_version, selected_sector, selector_time) print(selected_item)
这些功能似乎单独工作得很好,但是当尝试运行整个程序时,除了

items_by_version

之外,列表似乎保持为空,我尝试过的任何操作都没有改变这一点。我可以就我可能缺少的内容获得一些建议吗?

我尝试过在整个过程的各个阶段打印列表,但是在

items_by_version

之后,它们最终都变成了空列表。我收到“ValueError: 16(或 
item_choice
 的随机值)不在列表中”。

python list dictionary
1个回答
0
投票
问题在于

item_locator

 函数的作用域和 return 语句。

我强烈建议在这里阅读有关范围的内容 →

https://www.w3schools.com/python/python_scope.asp

您正在函数

selected_item

 中返回 
item_locator
 变量,但没有将其分配给任何内容。如果您有一个返回某些内容的函数,则需要将某些内容分配给某些内容。

selected_item = item_locator(selected_version, selected_sector, selector_time)
并且还稍微改变一下功能:

def item_locator(version, sector, time): available_items = [] time_items = [] time_items.append(item_one) if version == "Version 1": if sector == "Sector One": if time == "Daylight": for i in time_items: for k, v in i: if k == "Daylight": available_items.extend([i] * v) item_choice = randint(0, 99) return available_items.index(item_choice)
注意:这只是阅读你的代码,我没有测试过。

© www.soinside.com 2019 - 2024. All rights reserved.