2017-08-28 3 views
1

Ich habe diese Liste der Listen:Python - erstellen Liste der Wörterbücher durch eine verschachtelte Liste Looping

music = [[u'Charles Bradley', u'Heart of Gold'], [u'Charles Bradley', u'Stay Away'], [u'Iron & Wine', u'Pagan Angel And A Borrowed Car'], [u'Iron & Wine', u'White Tooth Man'], [u'Iron & Wine', u'Lovesong of the Buzzard'], [u'Iron & Wine', u'Carousel'], [u'Iron & Wine', u'House By The Sea'], [u'Iron & Wine', u'Innocent Bones'], [u'Iron & Wine', u"Wolves (Song of the Shepherd's Dog)"], [u'Iron & Wine', u'Resurrection Fern'], [u'Iron & Wine', u'Boy With a Coin'], [u'Iron & Wine', u'The Devil Never Sleeps'], [u'Iron & Wine', u'Peace Beneath The City'], [u'Iron & Wine', u'Flightless Bird, American Mouth'], [u'Animal Collective', u'In the Flowers'], [u'Animal Collective', u'My Girls'], [u'Animal Collective', u'Also Frightened'], [u'Animal Collective', u'Summertime Clothes'], [u'Animal Collective', u'Daily Routine'], [u'Animal Collective', u'Bluish'], [u'Animal Collective', u'Guys Eyes'], [u'Animal Collective', u'Taste'], [u'Animal Collective', u'Lion in a Coma'], [u'Animal Collective', u'No More Runnin'], [u'Animal Collective', u'Brother Sport'], [u'Richard Hawley', u'I Still Want You'], [u'Richard Hawley', u'The World Looks Down'], [u'Richard Hawley', u'Which Way'], [u'Richard Hawley', u'Serenade Of Blue'], [u'Richard Hawley', u'Long Time Down'], [u'Richard Hawley', u'Nothing Like A Friend'], [u'Richard Hawley', u'Sometimes I Feel'], [u'Richard Hawley', u'Tuesday pm'], [u'Richard Hawley', u'Welcome The Sun'], [u'Richard Hawley', u'Heart Of Oak'], [u'Richard Hawley', u'What Love Means'], [u'Suuns', u'Powers of Ten'], [u'Suuns', u'2020'], [u'Suuns', u'Minor Work'], [u'Suuns', u'Mirror Mirror'], [u'Suuns', u"Edie's Dream"], [u'Suuns', u'Sunspot'], [u'Suuns', u'Bambi'], [u'Suuns', u'Holocene City'], [u'Suuns', u'Images du Futur'], [u'Suuns', u"Music Won't Save You"], [u'Deerhunter', u'Earthquake'], [u'Deerhunter', u'Don\u2019t Cry'], [u'Deerhunter', u'Revival'], [u'Deerhunter', u'Sailing'], [u'Deerhunter', u'Memory Boy'], [u'Deerhunter', u'Desire Lines'], [u'Deerhunter', u'Basement Scene'], [u'Deerhunter', u'Helicopter'], [u'Deerhunter', u'Fountain Stairs'], [u'Deerhunter', u'Coronado'], [u'Deerhunter', u'He Would Have Laughed'], [u'Animal Collective', u'FloriDada'], [u'Animal Collective', u'Hocus Pocus'], [u'Animal Collective', u'Vertical'], [u'Animal Collective', u'Lying in the Grass'], [u'Animal Collective', u'The Burglars'], [u'Animal Collective', u'Natural Selection'], [u'Animal Collective', u'Bagels in Kiev'], [u'Animal Collective', u'On Delay'], [u'Animal Collective', u'Spilling Guts'], [u'Animal Collective', u'Summing the Wretch'], [u'Animal Collective', u'Golden Gal'], [u'Animal Collective', u'Recycling'], [u'Elvis Costello & The Attractions', u'Uncomplicated'], [u'Elvis Costello & The Attractions', u"I Hope You're Happy Now"], [u'Elvis Costello & The Attractions', u'Tokyo Storm Warning'], [u'Elvis Costello & The Attractions', u'Home Is Anywhere You Hang Your Head'], [u'Elvis Costello & The Attractions', u'I Want You'], [u'Elvis Costello & The Attractions', u'Honey Are You Straight Or Are You Blind'], [u'Elvis Costello & The Attractions', u'Blue Chair'], [u'Elvis Costello & The Attractions', u'Battered Old Bird'], [u'Elvis Costello & The Attractions', u'Crimes Of Paris'], [u'Elvis Costello & The Attractions', u'Poor Napoleon'], [u'Elvis Costello & The Attractions', u'Next Time Round']] 

und ich möchte mit einer Liste der Wörterbücher, um am Ende, wo jeder einzigartigen Künstler der key ist und seine Liste der Tracks ist die value, etwa so:

dicts = [{'Charles Bradley: ['Heart of Gold', 'Stay Away']}, ...]] 

für das ich gekommen bin bis hierher:

artists = set() 
dicts=[] 

for item in music: 
    artists.add(item[0]) 
    for artist in artists: 
     if artist in item: 
      dicts[artist]=item[1] 

, die eindeutig nicht weit genug, weil ich:

würde
{u'Suuns': u"Music Won't Save You", u'Animal Collective': u'Recycling', u'Iron & Wine': u'Flightless Bird, American Mouth', u'Deerhunter': u'He Would Have Laughed', u'Charles Bradley': u'Stay Away', u'Elvis Costello & The Attractions': u'Next Time Round', u'Richard Hawley': u'What Love Means'} 

jede Hilfe sehr geschätzt werden.

from collections import defaultdict 

d = defaultdict(list) 

for artist, song in music: 
    d[artist].append(song) 

full_list = [{a:b} for a, b in d.items()] 

Ausgabe::

Antwort

3

können Sie ein defaultdict verwenden

[{u'Suuns': [u'Powers of Ten', u'2020', u'Minor Work', u'Mirror Mirror', u"Edie's Dream", u'Sunspot', u'Bambi', u'Holocene City', u'Images du Futur', u"Music Won't Save You"]}, {u'Animal Collective': [u'In the Flowers', u'My Girls', u'Also Frightened', u'Summertime Clothes', u'Daily Routine', u'Bluish', u'Guys Eyes', u'Taste', u'Lion in a Coma', u'No More Runnin', u'Brother Sport', u'FloriDada', u'Hocus Pocus', u'Vertical', u'Lying in the Grass', u'The Burglars', u'Natural Selection', u'Bagels in Kiev', u'On Delay', u'Spilling Guts', u'Summing the Wretch', u'Golden Gal', u'Recycling']}, {u'Iron & Wine': [u'Pagan Angel And A Borrowed Car', u'White Tooth Man', u'Lovesong of the Buzzard', u'Carousel', u'House By The Sea', u'Innocent Bones', u"Wolves (Song of the Shepherd's Dog)", u'Resurrection Fern', u'Boy With a Coin', u'The Devil Never Sleeps', u'Peace Beneath The City', u'Flightless Bird, American Mouth']}, {u'Deerhunter': [u'Earthquake', u'Don\u2019t Cry', u'Revival', u'Sailing', u'Memory Boy', u'Desire Lines', u'Basement Scene', u'Helicopter', u'Fountain Stairs', u'Coronado', u'He Would Have Laughed']}, {u'Charles Bradley': [u'Heart of Gold', u'Stay Away']}, {u'Elvis Costello & The Attractions': [u'Uncomplicated', u"I Hope You're Happy Now", u'Tokyo Storm Warning', u'Home Is Anywhere You Hang Your Head', u'I Want You', u'Honey Are You Straight Or Are You Blind', u'Blue Chair', u'Battered Old Bird', u'Crimes Of Paris', u'Poor Napoleon', u'Next Time Round']}, {u'Richard Hawley': [u'I Still Want You', u'The World Looks Down', u'Which Way', u'Serenade Of Blue', u'Long Time Down', u'Nothing Like A Friend', u'Sometimes I Feel', u'Tuesday pm', u'Welcome The Sun', u'Heart Of Oak', u'What Love Means']}] 
+1

grrr 1 Minute .. – Solaxun

2
from collections import defaultdict 

d = defaultdict(list) 
songs = [[u'Charles Bradley', u'Heart of Gold'], [u'Charles Bradley', u'Stay Away'], [u'Iron & Wine', u'Pagan Angel And A Borrowed Car'], [u'Iron & Wine', u'White Tooth Man'], [u'Iron & Wine', u'Lovesong of the Buzzard'], [u'Iron & Wine', u'Carousel'], [u'Iron & Wine', u'House By The Sea'], [u'Iron & Wine', u'Innocent Bones'], [u'Iron & Wine', u"Wolves (Song of the Shepherd's Dog)"], [u'Iron & Wine', u'Resurrection Fern'], [u'Iron & Wine', u'Boy With a Coin'], [u'Iron & Wine', u'The Devil Never Sleeps'], [u'Iron & Wine', u'Peace Beneath The City'], [u'Iron & Wine', u'Flightless Bird, American Mouth'], [u'Animal Collective', u'In the Flowers'], [u'Animal Collective', u'My Girls'], [u'Animal Collective', u'Also Frightened'], [u'Animal Collective', u'Summertime Clothes'], [u'Animal Collective', u'Daily Routine'], [u'Animal Collective', u'Bluish'], [u'Animal Collective', u'Guys Eyes'], [u'Animal Collective', u'Taste'], [u'Animal Collective', u'Lion in a Coma'], [u'Animal Collective', u'No More Runnin'], [u'Animal Collective', u'Brother Sport'], [u'Richard Hawley', u'I Still Want You'], [u'Richard Hawley', u'The World Looks Down'], [u'Richard Hawley', u'Which Way'], [u'Richard Hawley', u'Serenade Of Blue'], [u'Richard Hawley', u'Long Time Down'], [u'Richard Hawley', u'Nothing Like A Friend'], [u'Richard Hawley', u'Sometimes I Feel'], [u'Richard Hawley', u'Tuesday pm'], [u'Richard Hawley', u'Welcome The Sun'], [u'Richard Hawley', u'Heart Of Oak'], [u'Richard Hawley', u'What Love Means'], [u'Suuns', u'Powers of Ten'], [u'Suuns', u'2020'], [u'Suuns', u'Minor Work'], [u'Suuns', u'Mirror Mirror'], [u'Suuns', u"Edie's Dream"], [u'Suuns', u'Sunspot'], [u'Suuns', u'Bambi'], [u'Suuns', u'Holocene City'], [u'Suuns', u'Images du Futur'], [u'Suuns', u"Music Won't Save You"], [u'Deerhunter', u'Earthquake'], [u'Deerhunter', u'Don\u2019t Cry'], [u'Deerhunter', u'Revival'], [u'Deerhunter', u'Sailing'], [u'Deerhunter', u'Memory Boy'], [u'Deerhunter', u'Desire Lines'], [u'Deerhunter', u'Basement Scene'], [u'Deerhunter', u'Helicopter'], [u'Deerhunter', u'Fountain Stairs'], [u'Deerhunter', u'Coronado'], [u'Deerhunter', u'He Would Have Laughed'], [u'Animal Collective', u'FloriDada'], [u'Animal Collective', u'Hocus Pocus'], [u'Animal Collective', u'Vertical'], [u'Animal Collective', u'Lying in the Grass'], [u'Animal Collective', u'The Burglars'], [u'Animal Collective', u'Natural Selection'], [u'Animal Collective', u'Bagels in Kiev'], [u'Animal Collective', u'On Delay'], [u'Animal Collective', u'Spilling Guts'], [u'Animal Collective', u'Summing the Wretch'], [u'Animal Collective', u'Golden Gal'], [u'Animal Collective', u'Recycling'], [u'Elvis Costello & The Attractions', u'Uncomplicated'], [u'Elvis Costello & The Attractions', u"I Hope You're Happy Now"], [u'Elvis Costello & The Attractions', u'Tokyo Storm Warning'], [u'Elvis Costello & The Attractions', u'Home Is Anywhere You Hang Your Head'], [u'Elvis Costello & The Attractions', u'I Want You'], [u'Elvis Costello & The Attractions', u'Honey Are You Straight Or Are You Blind'], [u'Elvis Costello & The Attractions', u'Blue Chair'], [u'Elvis Costello & The Attractions', u'Battered Old Bird'], [u'Elvis Costello & The Attractions', u'Crimes Of Paris'], [u'Elvis Costello & The Attractions', u'Poor Napoleon'], [u'Elvis Costello & The Attractions', u'Next Time Round']] 
for artist, title in songs: 
    d[artist].append(title) 

print(d) 
0

Ich glaube, du bist ein bisschen zu viel Arbeit zu tun. Das Set wird nicht wirklich benötigt, da Sie einfach überprüfen können, ob sich der Schlüssel mit dem Schlüsselwort "in" im Wörterbuch befindet. Wenn ich Sie wäre, würde ich stattdessen den Künstler holen, prüfen, ob der Künstler im Wörterbuch ist, und wenn ja, fügen Sie ihn der Liste der Lieder dieses Künstlers hinzu.

for item in music: 
    artistExists=False 
    for dict in dicts: 
     if item[0] in dict: 
      dict[item[0]].append(item[1]) 
      artistExists=True 
      break 
    if not artistExists: 
     dict.append({item[0]: [item[1]]}) 

(defaultdict hier gut funktioniert, aber ich wollte, ohne es eine Antwort geben)


Randnotiz, warum speziell wollen Sie eine Liste von dicts? Dies könnte viel einfacher zu verstehen, zu erstellen und zu implementieren, wenn mit einem einzigen Diktat getan wird.

dict={} 
for item in music: 
    if item[0] not in dict: 
     dict[item[0]] = [] 
    dict[item[0]].append(item[1])  

, die mit Ihnen verlassen würde:

{'Charles Bradley': ['Heart of Gold', 'Stay Away'], 'Iron & Wine': ['Lovesong of the Buzzard', 'White Tooth Man'], ...} 
2

Eine Alternative ohne defaultdict:

dicts = {} 

for key, value in music: 
    if key not in dicts: 
     dicts[key] = [] 
    dicts[key].append(value) 

Danach Sie die full_list Ansatz von @ Ajax1234 verwenden können.

Verwandte Themen