4

我需要废字典,主要是典型值的映射,以及一些独特的值。获得它的第一种方法是定义一个扁平的“显式”字典文字:

musicians = {
    'ABBA': 'pop',
    'Avril Lavigne': 'pop',
    ...
    'Mikhail Krug': 'russian chanson',
    'The Rolling Stones': 'rock',
    ...
    'Zaz': 'jazz',
}

第二 - “干”一堆典型列表和特价词典:

pop_musicians = [
    'ABBA',
    'Avril Lavigne',
    ...
]

rock_musicians = [...]

unusual_musicians = {
    'Mikhail Krug': 'russian chanson',
    'Zaz': 'jazz',
}

musicians = dict(
    [(m, 'pop') for m in pop_musicians] +
    [(m, 'rock') for m in rock_musicians] +
    unusual_musicians.items()
)

假设在我的例子中,键值关系比在这个例子中更易变(某些键的值可能会改变)。

您更喜欢哪种方式,为什么?在你看来,哪一个更pythonic?

4

2 回答 2

9

我的答案是分层你的数据结构:

genres = {
    "rock": [
        "some rock band",
        "some other rock band",
    ],
    "pop": [
        "some pop star",
        "some pop group",
    ],
}

如果你必须使用第一种格式,字典理解会很好地完成这项工作:

musicians = {musician: genre for genre, musicians in genres.items() for musician in musicians}

将产生:

{'some other rock band': 'rock', 'some pop group': 'pop', 'some rock band': 'rock', 'some pop star': 'pop'}

或者,如果你发现自己不得不做很多复杂的操作,也许可以开设一个音乐家课程来给自己更多的自由。

于 2012-09-20T21:09:12.470 回答
2

对于简短的音乐家名单,第一个选择可能是最好的。如果您有相当大的列表,我会选择第二种选择。没有什么不清楚的,它减少了拼写错误的风险(如果字典变大,很可能会出现这种情况),它还将音乐家组织成视觉上不同的列表。

于 2012-09-20T21:18:56.337 回答