Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为列表中的字符串设置变量_Python - Fatal编程技术网

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”后面的括号内。这正是我需要的。谢谢你,先生!