3

次のようなリストのリストがあります。

[['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]

そして、各キーが名前で、各値がリスト内のサブリストの位置に対応する番号である辞書に変換したいと思います。

{'Tom': 0, 'Dick': 0, 'Harry': 1, 'John': 1, 'Mike': 1, 'Bob': 2}

さまざまなリスト内包表記を試しましたが、入れ子になったリストで正しく動作させることができませんでした。次のように、ネストされたループを使用できます。

names = [['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]
names_dict = {}
for i, name_sublist in enumerate(names):
    for name in name_sublist:
        names_dict[name] = i

しかし、それを行うためのより短く、よりエレガントな方法があると思います。

4

3 に答える 3

14
names_dict = dict((name,index)
                  for index,lst in enumerate(names)
                  for name in lst)

例:

>>> names = [['Tom', 'Dick'], ['Harry', 'John', 'Mike'], ['Bob']]
>>> names_dict = dict((name,index)
...                   for index,lst in enumerate(names)
...                   for name in lst)
>>> names_dict
{'Tom': 0, 'Mike': 1, 'Dick': 0, 'Harry': 1, 'Bob': 2, 'John': 1}
于 2009-02-10T22:51:09.933 に答える
1

パイソン2.6

dict([(t,l.index(x)) for x in l for t in x])

python3.0

{t:l.index(x) for x in l for t in x}

l が名前のリストの場合

于 2011-01-12T20:39:19.320 に答える