【问题标题】:Python Accessing Lists or Dicts from Names in String VariablesPython 从字符串变量中的名称访问列表或字典
【发布时间】:2018-01-30 22:49:41
【问题描述】:

我有一个 Python 函数,它从现有列表名称的文本文件中随机选择现有列表的名称,并将所选列表名称作为字符串返回。在函数之外,脚本应该打印该列表的内容。

我遇到的问题是弄清楚如何(在函数之外)打印/访问函数以字符串形式返回名称的列表。

如果我在函数之外创建列表:

list_number_one = ['apples', 'oranges', 'pears']
list_number_two = ['bananas', 'grapes', 'unbridled existentialism']

函数本身看起来像:

def pick_a_list(list1, list2):
    list_of_lists = [list1, list2]
    random_list = random.choice(list_of_lists)
    return random_list

当我使用该功能时...

chosen_list = pick_a_list('list_number_one', 'list_number_two')

如果它返回字符串“list_number_one”作为随机选择的列表,那么我该怎么做(在函数之外):

print (chosen_list)

并得到回报:

['apples', 'oranges', 'pears']

在实际脚本中,假设我唯一的选择是将字符串变量作为列表名称的输入,这可能很不方便。我正在使用的列表数量非常多。我搜索了高低的答案,但我发现的所有问答都是关于基于变量输入分配键/值对。任何帮助将不胜感激,我不想只是用全局变量轰炸函数。

【问题讨论】:

  • 为什么要在选择列表时传递字符串?传递列表..“在实际脚本中,假设我唯一的选择是将字符串变量作为列表名称的输入,这可能很不方便”我们为什么要假设?这可能是什么原因?
  • 您应该使用单个字典来包含列表。
  • 当然,您可以使用字符串从globals() 命名空间字典中提取列表,但是为什么要这样滥用全局命名空间呢?相反,您应该组织您的程序,以便将所需的数据放入适当的数据结构中。

标签: python python-3.x


【解决方案1】:

假设你的列表是被这样的用户强制使用的(因为你为什么还要折磨自己来依赖变量的字符串值呢?):

list_name = input("enter list name: ")
list_value = input("enter list values separated by commas: ")

一种简单的反击方法是使用字典来存储您的列表:

my_lists = {}
while has_input: 
    list_name = input("enter list name: ")
    list_values = input("enter list values separated by commas: ")
    my_lists{list_name} = list_values.split(',')
    # TODO: code exit loop condition for has_input = False

# my_lists:
# {'list_number_one': ['apples', 'oranges', 'pears'],
#  'list_number_two': ['bananas', 'grapes', 'unbridled existentialism']}

chosen_list = pick_a_list(my_lists['list_number_one'], my_lists['list_number_two'])

【讨论】:

    【解决方案2】:

    问题在于您发送的是字符串,而不是列表本身。如果您从传递给函数的列表对象周围删除引号,如下所示:

    chosen_list = pick_a_list(list_number_one, list_number_two)
    

    如果你的随机选择与我的系统选择的匹配,你会得到['bananas', 'grapes', 'unbridled existentialism']

    【讨论】:

    • 明白,但我再次从列表名称的文本文件中读取作为我的输入。即使没有随机化部分,问题仍然存在,如果我有一个作为列表名称的字符串,我如何调用或访问我刚刚从文本文件中读取的名称的列表?
    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2012-05-02
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多