我需要wast字典,主要根据典型值映射,以及一些独特的值。 获得它的第一种方法是定义一个扁平的“显式”字典文字:
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?
答案 0 :(得分:9)
我的回答是分层数据结构:
genres = {
"rock": [
"some rock band",
"some other rock band",
],
"pop": [
"some pop star",
"some pop group",
],
}
如果您必须以第一种格式使用它,dictionary comprehension可以很好地完成工作:
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'}
或者,如果你发现自己不得不做很多复杂的操作,也许可以让音乐家上课给自己更多的自由。
答案 1 :(得分:2)
对于一个音乐家的简短列表,第一个选项可能是最好的。如果你有相当大的列表,我会选择第二个选项。关于它没有什么不清楚,它降低了拼写错误的风险(如果dict变大,这很可能),并且它还将音乐家组织成视觉上不同的列表。