2010-11-07 22 views
2

j'ai un dictionnaire qui a un nom de lieu comme clé et la valeur qu'elle a plusieurs listes de mots, par exemple, 1 entrée ressemble:Dictionnaires en Python

{'myPlaceName': [u'silly', u'i', u'wish!', u'lol', [u'the', u'lotto'], [, u'me', u'a', u'baby?'], [u'new', u'have', u'new', u'silly', u'new', u'today,', u'cant', u'tell', u'yet,', u'but', u'all', u'guesses', u'silly']]} 

Comment puis-je les rejoindre tous si Je peux obtenir les mots communs associés à chaque endroit? Je voudrais que ma sortie devienne bête et nouvelle comme les mots communs pour le dictionnaire.

+3

Votre liste contient une autre liste et n'est pas jointe correctement. – pyfunc

+2

donne un exemple de la sortie attendue. C'est un peu flou ce que vous voulez. – Ponkadoodle

+0

La valeur que vous affichez pour l'entrée du dictionnaire est une liste de mots autonomes et la sous-liste d'autres mots, les délimiteurs pour ce faire sont syntaxiquement incorrects, ils ne correspondent pas à votre description écrite. Mis à part le problème du support, ce qui est faux, votre description ou la valeur? – martineau

Répondre

2

Cette fonction prend une liste d'une liste de mots et renvoie tous les mots qui se trouvent dans toutes les listes.
par exemple get_common_words([['hi', 'hello'], ['bye', 'hi']]) retourne ['hi']

def get_common_words(places): 
    common_words = [] 
    for word in places[0]: 
     is_common = all(word in place for place in places[1:]) #check to see that this word is in all places 
     if is_common: 
      common_words.append(word) 
    return common_words 

ou un paquebot géant:

get_common_words = lambda places: [word for word in places[0] if all(word in place for place in places[1:])] 

ou tout simplement aller avec l'une des méthodes proposées dans les commentaires de cette réponse.

+4

'reduce (set.intersection, map (set, lieux))' – jfs

+0

@ J.F. J'aurais dû savoir qu'il y avait un moyen plus concis que ce que j'avais posté. C'est Python, après tout ... – Ponkadoodle

+1

'set.intersection (* map (set, places))' sur Python 2.6 ou plus récent. – jfs

1

print ', '.join(dictname['myPlaceName'])

Cela va créer une liste séparée par des virgules de toutes les entrées de la liste. Remplacez dictname par le nom de votre dict.

+1

Cela ne fonctionnera pas pour une liste imbriquée. –

1

Si c'est une liste contenant uniquement des mots, utilisez join.

>>> k = [u'silly', u'i', u'wish!', u'lol'] 
>>> " ".join(k) 
u'silly i wish! lol' 
>>>