Python 为列表中的字符串设置变量
假设我有以下列表(脚本中的字符串变量): 我需要一种方法来解析这个列表,并根据发生率将它们设置为变量。因此,最终它将设置如下变量:Python 为列表中的字符串设置变量,python,Python,假设我有以下列表(脚本中的字符串变量): 我需要一种方法来解析这个列表,并根据发生率将它们设置为变量。因此,最终它将设置如下变量: dog1='lab' dog2='terrier' dog3='blah' cat1='brown' cat2='angry' 等等。在我的列表中可能有1次显示为dog,或者200,我只需要一种方法来解析列表(当前是我调用的一个字符串变量),并设置这些变量,以便稍后在脚本中调用 s = """dog = lab cat = brown fish = wet dog
dog1='lab'
dog2='terrier'
dog3='blah'
cat1='brown'
cat2='angry'
等等。在我的列表中可能有1次显示为dog,或者200,我只需要一种方法来解析列表(当前是我调用的一个字符串变量),并设置这些变量,以便稍后在脚本中调用
s = """dog = lab
cat = brown
fish = wet
dog = terrier
cat = angry
fish = cooked
dog = blah
cat = soon
fish = wegetthepattern"""
for i in s.split('\n'):
exec(i.split()[0] + '= "' + i.split()[-1] + '"')
print(cat) # prints 'soon'
但是你应该避免这样
但是你应该避免这样做。通常的答案是:不要尝试这样做 你可以试着去实现它,但你会后悔的。将单词存储在dict中:
In [1]: s = '''dog = lab
...: cat = brown
...: fish = wet
...: dog = terrier
...: cat = angry
...: fish = cooked
...: dog = blah
...: cat = soon
...: fish = wegetthepattern'''
In [2]: from collections import defaultdict
In [3]: words = defaultdict(list)
In [4]: for pair in s.split('\n'):
...: left, right = pair.split(' = ')
...: words[left].append(right)
...:
In [5]: words['dog']
Out[5]: ['lab', 'terrier', 'blah']
通常的答案是:不要尝试这样做 你可以试着去实现它,但你会后悔的。将单词存储在dict中:
In [1]: s = '''dog = lab
...: cat = brown
...: fish = wet
...: dog = terrier
...: cat = angry
...: fish = cooked
...: dog = blah
...: cat = soon
...: fish = wegetthepattern'''
In [2]: from collections import defaultdict
In [3]: words = defaultdict(list)
In [4]: for pair in s.split('\n'):
...: left, right = pair.split(' = ')
...: words[left].append(right)
...:
In [5]: words['dog']
Out[5]: ['lab', 'terrier', 'blah']
是我还是我没有跟随?你真的需要这样吗?为什么不像
{'dog':('terrier','blah','lab'),'cat':('brown','angry')}
中那样散列元组呢?请不要这样做。用口述什么的。是我还是我没听懂?你真的需要这样吗?为什么不像{'dog':('terrier','blah','lab'),'cat':('brown','angry')}
中那样散列元组呢?请不要这样做。使用dict之类的工具。exec()
应该是最后的选择。它很难安全地使用。这就是为什么我说“你应该避免这个”;)@链接中的RussellBorogove:“我假设每个人都已经知道如何正确使用这两个工具,所以我不会在这里谈论安全性”:exec()
应该是最后的选择。它很难安全地使用。这就是为什么我说“你应该避免这个”;)@链接中的RussellBorogove:“我假设每个人都已经知道如何正确使用这两个,所以我不会在这里谈论安全性”:)酷,我明白了。在输出上,是否有方法指定哪个附加到输出?就像dog 2只取回terrier一样?@user2152623好吧,你可以用你总是从列表中检索项目的方法来做:单词['dog'][1]
用于'terrier'
,单词['dog'][2]
用于'blah'
。啊,太酷了。我把[1]放在“dog”后面的括号内。这正是我需要的。谢谢你,先生!酷,我明白了。在输出上,是否有方法指定哪个附加到输出?就像dog 2只取回terrier一样?@user2152623好吧,你可以用你总是从列表中检索项目的方法来做:单词['dog'][1]
用于'terrier'
,单词['dog'][2]
用于'blah'
。啊,太酷了。我把[1]放在“dog”后面的括号内。这正是我需要的。谢谢你,先生!