Как вернуть список значений из словаря? - PullRequest
0 голосов
/ 30 ноября 2018

Я создал словарь, который выглядит следующим образом:

{100000: (400, 'Does not want to build a %SnowMan %StopAsking', ['SnowMan', 'StopAsking'], [100, 200, 300], [400, 500]), 
100001: (200, 'Make the ocean great again.', [''], [], [400]), 
100002: (500, "Help I'm being held captive by a beast!  %OhNoes", ['OhNoes'], [400], [100, 200, 300]), 
100003: (500, "Actually nm. This isn't so bad lolz :P %StockholmeSyndrome", ['StockholmeSyndrome'], [400, 100], []), 
100004: (300, 'If some random dude offers to %ShowYouTheWorld do yourself a favour and %JustSayNo.', ['ShowYouTheWorld', 'JustSayNo'], [500, 200], [400]), 
100005: (400, 'LOLZ BELLE.  %StockholmeSyndrome  %SnowMan', ['StockholmeSyndrome', 'SnowMan'], [], [200, 300, 100, 500])}

Я пытаюсь вернуть список строк, содержащих данный тег, где мой словарь имеет форму {string_id: (user_id, string, tags, likes, dislikes)}.

Пока мой код выглядит следующим образом:

for key, value in mydict.items():
    for items in value:
        if items == value[2]:
            tagged_chirps = [value[1]]
return tagged_chirps

Однако, когда я запускаю это для тега "SnowMan", функция возвращает только:

['LOLZ BELLE.  %StockholmeSyndrome  %SnowMan']

Вместо того, что я хочу, чтобы он возвращал, что будет:

['Does not want to build a %SnowMan %StopAsking', 
    'LOLZ BELLE.  %StockholmeSyndrome  %SnowMan']

Кто-нибудь знает, почему моя функция будет возвращать только одну из строк вместо всех желаемых строк?

Ответы [ 4 ]

0 голосов
/ 30 ноября 2018

Вы можете попробовать это:

tag = 'SnowMan'
res = [string for user_id, string, tags, likes, dislikes in my_dict.values() if tag in tags]

Возвращает:

['Does not want to build a %SnowMan %StopAsking', 'LOLZ BELLE.  %StockholmeSyndrome  %SnowMan']
0 голосов
/ 30 ноября 2018

Чтобы создать список, вам нужно создать список, а затем добавить к нему.

tagged_chirps=[]
for key, value in mydict.items():
    if 'SnowMan' in value[2]:
        tagged_chirps += [value[1]]
print(tagged_chirps)
0 голосов
/ 30 ноября 2018

Просто используйте понимание списка, чтобы составить список строк:

tag = 'SnowMan'

strings = [v[1] for k,v in my_dict.items() if tag in v[2]]

Возвращает:

['Does not want to build a %SnowMan %StopAsking', 'LOLZ BELLE.  %StockholmeSyndrome  %SnowMan']
0 голосов
/ 30 ноября 2018

Это сработало для вашего словаря:

def get_string(dict,tag):
    result=[]
    for el in mydisct:
        if tag in mydisct[el][2]:
            result.append(mydisct[el][1])
    return result

print get_string(mydisct,'SnowMan')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...