1

我有一个数据/character_data.py:

CHARACTER_A = { 1: {"level": 1, "name":"Ann", "skill_level" : 1},
                2: {"level": 2, "name":"Tom", "skill_level" : 1}}
CHARACTER_B = { 1: {"level": 1, "name":"Kai", "skill_level" : 1},
                2: {"level": 2, "name":"Mel", "skill_level" : 1}}

在 main.py 中,我可以这样做:

from data import character_data as character_data
print character_data.CHARACTER_A[1]["name"]
>>> output: Ann
print character_data.CHARACTER_B[2]["name"]
>>> output: Mel

我如何实现这一目标?

from data import character_data as character_data
character_type = "CHARACTER_A"
character_id = 1
print character_data.character_type[character_id]["name"]
>>> correct output should be: Ann

尝试将 character_type 用作“CHARACTER_A”时出现 AttributeError。

4

3 回答 3

2

您可以使用locals()

>>> from data.character_data import CHARACTER_A, CHARACTER_B
>>> character_id = 1
>>> character_type = "CHARACTER_A"
>>> locals()[character_type][character_id]["name"]
Ann

不过,考虑合并CHARACTER_ACHARACTER_B进入一个 dict 并访问这个 dict 而不是locals().

另外,请参阅深入 Python:locals 和 globals

于 2013-08-11T10:34:28.187 回答
2

这个怎么样

In [38]: from data import character_data as character_data

In [39]: character_type = "CHARACTER_A"

In [40]: character_id = 1

In [41]: getattr(character_data, character_type)[character_id]["name"]
Out[41]: 'Ann'
于 2013-08-11T11:15:32.853 回答
1

您需要正确地构建数据。

characters = {}
characters['type_a'] = {1: {"level": 1, "name":"Ann", "skill_level" : 1},
                2: {"level": 2, "name":"Tom", "skill_level" : 1}}
characters['type_b'] = ...

或者,更好的解决方案是创建自己的“字符”类型,并使用它来代替:

class Character(object):
    def __init__(self, type, level, name, skill):
        self.type = type
        self.level = level
        self.name = name
        self.skill = skill

characters = []
characters.append(Character('A',1,'Ann',1))
characters.append(Character('A',2,'Tom',1))
characters.append(Character('B',2,'Kai',1)) # and so on

然后,

all_type_a = []
looking_for = 'A'
for i in characters:
   if i.type == looking_for:
      all_type_a.append(i)

或者,更短的方式:

all_type_a = [i for i in characters if i.type == looking_for]
于 2013-08-11T11:49:45.607 回答