我一直在玩Python,我有这个列表,我需要解决。基本上我将游戏列表键入多维数组,然后对于每个数组,它将根据第一个条目创建3个变量。
制作的数组:
Applist = [
['Apple', 'red', 'circle'],
['Banana', 'yellow', 'abnormal'],
['Pear', 'green', 'abnormal']
]
为循环指定每个水果的名称,颜色和形状。
for i in Applist:
i[0] + "_n" = i[0]
i[0] + "_c" = i[1]
i[0] + "_s" = i[2]
虽然这样做,我得到一个无法分配给操作员的消息。我该如何对抗这个?
预期结果将是:
Apple_n == "Apple"
Apple_c == "red"
Apple_s == "circle"
每种水果等。
答案 0 :(得分:18)
这是一个坏主意。您不应该动态创建变量名,而是使用字典:
variables = {}
for name, colour, shape in Applist:
variables[name + "_n"] = name
variables[name + "_c"] = colour
variables[name + "_s"] = shape
现在以variables["Apple_n"]
等方式访问它们
你真正想要的,也许是一个决定词:
variables = {}
for name, colour, shape in Applist:
variables[name] = {"name": name, "colour": colour, "shape": shape}
print "Apple shape: " + variables["Apple"]["shape"]
或者甚至更好,namedtuple
:
from collections import namedtuple
variables = {}
Fruit = namedtuple("Fruit", ["name", "colour", "shape"])
for args in Applist:
fruit = Fruit(*args)
variables[fruit.name] = fruit
print "Apple shape: " + variables["Apple"].shape
如果您使用Fruit
(即没有设置namedtuple
到variables["Apple"].colour
),则无法更改每个"green"
的变量,因此它可能不是好的解决方案,取决于预期的用途。如果您喜欢namedtuple
解决方案,但想要更改变量,则可以将其改为成熟的Fruit
类,这可以用作namedtuple
的替代品。上面代码中的Fruit
。
class Fruit(object):
def __init__(self, name, colour, shape):
self.name = name
self.colour = colour
self.shape = shape
答案 1 :(得分:2)
用字典做这件事最容易:
app_list = [
['Apple', 'red', 'circle'],
['Banana', 'yellow', 'abnormal'],
['Pear', 'green', 'abnormal']
]
app_keys = {}
for sub_list in app_list:
app_keys["%s_n" % sub_list[0]] = sub_list[0]
app_keys["%s_c" % sub_list[0]] = sub_list[1]
app_keys["%s_s" % sub_list[0]] = sub_list[2]