如何将字符串(例如“ a”)转换为可以使用附加函数的变量名?
我试图接受仅由小写字母组成的输入,并在字母名称的变量下用数字记录字符串中的字母位置。我遇到的问题是我必须将输入中的字符串转换为可以使用附加功能的变量名。 在某个地方看到它后,我尝试使用vars()(因为我对此并不陌生,所以不知道vars()的作用)。有时,但并非总是如此,这可以正常工作。 现在,我正在寻找一种更好的方法。
'''This is the code i have now. This does not work all the time'''
ord = input()
count = 1
for i in ord:
i = vars()[i]
i.append(count)
count = count + 1
i = []
答案 0 :(得分:1)
这是与您尝试使用字典进行的操作(我认为是字母索引)相对应的正确解决方案:
result = {}
ord = input() # why do you call that variable ord?
count = 1
for i in ord:
if i not in result:
result[i] = []
result[i].append(count)
count += 1
print(result)
没有变种,没有本地人,没有带有不安全上下文的发短信。有人在您的输入中输入i
或其他类似问题时,没问题。一切安全又简单。可以通过使用defaultdict来进一步简化。
请注意:忘记存在vars / locals / globals和类似对象。即使我使用Python编程已有十年之久,我也从未使用过它们。当您编写一些疯狂的代码(例如Python调试器)时,这些会很有趣。否则不需要。除非您是武士,否则这些剑会割伤您。
答案 1 :(得分:0)
您只需要一个将索引添加到列表的字典,defaultdict对此非常有用
from collections import defaultdict
text = input()
result = defaultdict(list)
for idx, letter in enumerate(text):
result[letter].append(idx)
print(result)
字符串asdc
的输出为{'a': [0], 'c': [3], 's': [1], 'd': [2]}
答案 2 :(得分:-1)
class Direction:
def __init__(self, dest, lock=''):
self.dest = dest
self.lock = lock
class Room:
def __init__(self, roomname, desc, item=''):
self.roomname = roomname
self.desc = desc
self.n = direction()
self.s = direction()
self.w = direction()
self.e = direction()
self.item = item
rooms = []
r = Room('outside', '')
r.n.dest = 4
rooms.append(r)
r = Room('hall', 'The hallway has doors to the east and south')
r.n.dest = 2
rooms.append(r)
函数返回当前上下文中定义的所有变量的字典。您可以使用它来设置值或将新值附加到列表中。查看下面的脚本示例:
vars()
您可以使用以下方法向此地图添加值
data=[]
print("Field Name:")
field=input()
print("Value:")
ord1 = input()
print("VALUE: {}".format(field))
i = vars().get(field,None)
if i is not None:
i.append(ord1)
print(data)
结果:
vars()['key']='Value'