Python从字符串变量中的名称访问列表或Dicts

时间:2018-01-30 22:49:41

标签: python python-3.x

我有一个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']

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

2 个答案:

答案 0 :(得分: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'])

答案 1 :(得分:0)

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

chosen_list = pick_a_list(list_number_one, list_number_two)

如果您的随机选择与我的系统选择匹配,您将获得['bananas', 'grapes', 'unbridled existentialism']