8

我一直在玩 Python,我有这个需要制定的列表。基本上我在多维数组中输入一个游戏列表,然后对于每个游戏,它将根据第一个条目生成 3 个变量。

制作的数组:

Applist = [
['Apple', 'red', 'circle'],
['Banana', 'yellow', 'abnormal'],
['Pear', 'green', 'abnormal']
]

For 循环为每个水果分配名称、颜色和形状。

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"

等每个水果。

4

2 回答 2

23

这是一个坏主意。您不应该动态创建变量名称,而是使用字典:

variables = {}
for name, colour, shape in Applist:
    variables[name + "_n"] = name
    variables[name + "_c"] = colour
    variables[name + "_s"] = shape

现在以variables["Apple_n"]等方式访问它们。

不过,您真正想要的也许是 dicts 的 dict:

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
于 2012-06-20T11:31:01.350 回答
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]
于 2012-06-20T11:32:17.433 回答