gpt4 book ai didi

python - 如何使用以前字典中的键和值创建字典?

转载 作者:行者123 更新时间:2023-11-28 22:14:07 24 4
gpt4 key购买 nike

我需要创建一个字典,其键值来自先前创建的字典。我以前的词典是:

{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])}

这个字典的形式是{key: (id, string, tags, likes, dislikes)}我需要创建的是一个字典,其键是第一个字典中的标签,其值是包含标签的 id 和字符串,以字典的形式呈现。

例如,如果我们采用标签'SnowMan',新字典应该如下所示:

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

或者,如果我们使用标签 'StockholmeSyndrome',新字典应该如下所示:

{'StockholmeSyndrome': {
500: ["Actually nm. This isn't so bad lolz :P %StockholmeSyndrome"],
400: ['LOLZ BELLE. %StockholmeSyndrome %SnowMan']}}

最后,新字典需要包含之前字典中的所有标签作为键,包括没有标签的事件。

我真的被这个问题困住了,谁能提供一些指导?

最佳答案

使用 collections.defualtdict您可以迭代并附加到嵌套字典结构中的列表:

from collections import defaultdict

dd = defaultdict(lambda: defaultdict(list))
for id_, text, tags, likes, dislikes in d.values():
for tag in tags:
dd[tag][id_].append(text)

print(dd)

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

defaultdictdict 的子类,因此您通常不需要进一步操作。但是,如果您需要一个常规的 dict 对象,您可以使用递归函数:

def default_to_regular_dict(d):
"""Convert nested defaultdict to regular dict of dicts."""
if isinstance(d, defaultdict):
d = {k: default_to_regular_dict(v) for k, v in d.items()}
return d

res = default_to_regular_dict(dd)

print(res)

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

关于python - 如何使用以前字典中的键和值创建字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com