【发布时间】:2017-09-03 03:53:43
【问题描述】:
我有这个字典列表:
artist_and_tags = [{u'Yo La Tengo': ['indie', 'indie rock', 'seen live', 'alternative', 'indie pop', 'rock', 'post-rock', 'dream pop', 'shoegaze', 'noise pop', 'folk', 'experimental', 'alternative rock', 'american', 'lo-fi', 'pop', 'new jersey', 'yo la tengo', 'usa', 'noise rock', '90s', 'noise', '00s', 'ambient', 'post-punk', '80s', 'mellow', 'psychedelic', 'hoboken', 'experimental rock', 'singer-songwriter', 'post rock', 'electronic', 'female vocalists', 'alt-country', 'dreamy', 'matador', 'chillout', 'instrumental', 'favorites', 'punk', 'electronica', 'slowcore', 'folk rock', 'new wave', 'jazz', 'eclectic', 'new york', 'emo']}, {u'Radiohead': ['alternative', 'alternative rock', 'rock', 'indie', 'electronic', 'seen live', 'british', 'britpop', 'indie rock', 'experimental', 'radiohead', 'progressive rock', '90s', 'electronica', 'art rock', 'experimental rock', 'post-rock', 'psychedelic', 'uk', 'male vocalists', 'pop', '00s', 'ambient', 'chillout', 'progressive', 'favorites', 'melancholic', 'awesome', 'overrated', 'english', 'beautiful', 'classic rock', 'genius', 'melancholy', 'better than radiohead', 'trip-hop', 'idm', 'indie pop', 'emo']}, {u'Portishead': ['trip-hop', 'electronic', 'female vocalists', 'chillout', 'trip hop', 'alternative', 'electronica', 'seen live', 'downtempo', 'british', 'indie', 'portishead', 'experimental', 'ambient', 'female vocalist', 'alternative rock', '90s', 'lounge', 'mellow', 'bristol', 'jazz', 'psychedelic', 'chill', 'melancholic', 'triphop', 'uk', 'rock', 'bristol sound', 'acid jazz', 'lo-fi']}]
我用来获取艺术家之间的关联。
为此,我正在做:
tags0 = set(artist_and_tags[0].values()[0])
tags1 = set(artist_and_tags[1].values()[0])
tags2 = set(artist_and_tags[2].values()[0])
然后:
intersection1 = tags0 & tags1
intersection2 = tags0 & tags2
intersection3 = tags1 & tags2
所以:
print (intersection1, len(intersection1), intersection2, len(intersection), intersection3, len(intersection3))
显示“Yo La Tengo”比“Portishead”更接近“Radiohead”,有 20 个相交的标签。
这段代码似乎有点多余,但是……
问题:
有没有办法在 for loop 中使用此逻辑(或包装在一个简单的 function 中),所以它可以与带有 n 艺术家(keys)的字典一起使用?
【问题讨论】:
-
您应该只保留集合作为值,不是吗?除非需要订购,或者您可能想要多件商品?
-
tags0 = set(artist_and_tags[0].values()[0])-->TypeError: 'dict_values' object does not support indexing -
给定 n 位艺术家,您想找出最匹配的两位,还是全部匹配?
-
所有匹配,是的
标签: python dictionary intersection