python - 用额外的值更新字典

标签 python dictionary

我有以下将数据(显示)从一种格式转换为另一种格式的方法,这在 trakt.tv 更新其 api 之前一直有效。

我现在需要的是一个季节编号内每个季节的所有剧集编号,如下所示

“季节”:[{“number”:1,“剧集”:[{“number”:1},{“number”:2}]}]}]

转换后的数据最终应该如下所示

“节目”:[{“标题”:“行尸走肉”,“年份”:2010年,“ids”:{“tvdb”:153021,“imdb”:“tt1520211”,“tmdb” : 1402, "tvrage": 25056}, "季节": [{"number": 1, "episodes": [{"number": 1}, {"number": 2}]}]}]

原始数据(显示)看起来像

{'episodes': [{'episode': 0, 'season': 1}, {'episode': 1, 'season': 1}, {'episode': 2, 'season' : 1}], 'imdbnumber': '260449', '标题': '维京人'}

标题、年份和 ids 部分都可以,如果我像现在一样运行代码,我最终会得到多个第 1 季(每集 1 个)

def convert_YAMJ_show_to_trakt(show):
#"shows": [{"title": "The Walking Dead", "year": 2010, "ids": {"tvdb": 153021, "imdb": "tt1520211", "tmdb": 1402, "tvrage": 25056}, "seasons": [{"number": 1, "episodes": [{"number": 1}, {"number": 2}]}]}]
trakt_show = {'ids':{}}

if 'imdbnumber' in show:
    if show['imdbnumber'].startswith('tt'):
        trakt_show['ids']['imdb'] = show['imdbnumber']
    else:
        trakt_show['ids']['tvdb'] = show['imdbnumber']

if 'tvdb' in show:
    trakt_show['ids']['tvdb'] = show['tvdb']

if 'imdb' in show:
    trakt_show['ids']['imdb'] = show['imdb']

if 'title' in show:
    trakt_show['title'] = show['title']

if 'episodes' in show and show['episodes']:
    for episode in show['episodes']:
        if 'date' in episode:
            #ep = {'episode': episode['episode'], 'season': episode['season'], 'watched_at': episode['date']}
            ep = {"seasons": [{"number": episode['season'], "episodes": [{"number": episode['episode']}]}]}
        else:
            #ep = {'episode': episode['episode'], 'season': episode['season']}
            ep = {"seasons": [{"number": episode['season'], "episodes": [{"number": episode['episode']}]}]}

        #if 'playcount' in episode:
        #     ep['plays'] = episode['playcount']

        #trakt_show['seasons'].append(ep)
        trakt_show.append(ep)
return trakt_show

最佳答案

你能试试这个吗:-

  1. 我改变了循环逻辑。创建了字典,其中作为季号是`episode的列表数量。
  2. 最终创建的字典输出结构。

代码:

show = {
        'episodes': [
                    {'episode': 0, 'season': 1}, {'episode': 1, 'season': 1}, {'episode': 2, 'season': 1},
                    {'episode': 0, 'season': 2}, {'episode': 1, 'season': 2}, {'episode': 2, 'season': 2},
                ], 
            'imdbnumber': '260449', 'title': 'Vikings'
        }


trakt_show = {'ids':{}}

if 'imdbnumber' in show:
    if show['imdbnumber'].startswith('tt'):
        trakt_show['ids']['imdb'] = show['imdbnumber']
    else:
        trakt_show['ids']['tvdb'] = show['imdbnumber']
try:
    trakt_show['ids']['tvdb'] = show['tvdb']
except:
    pass
try:
    trakt_show['ids']['imdb'] = show['imdb']
except:
    pass
try:
    trakt_show['title'] = show['title']
except:
    pass

if 'episodes' in show and show['episodes']:
    ep = {}
    for episode in show['episodes']:
        try:
            ep[episode["season"]].append(episode["episode"])
        except:
            ep[episode["season"]] = [episode["episode"]]

    ep1 = {"seasons":[]}
    for i in ep:
        tmp = dict()
        tmp["number"] = i
        tmp["episodes"] = []
        for j in ep[i]:
            tmp["episodes"].append({"number":j})
        ep1["seasons"].append(tmp)
    trakt_show.update(ep1)
print trakt_show

输出:

vivek@vivek:~/Desktop$ python 2.py 
{'seasons': [{'episodes': [{'number': 0}, {'number': 1}, {'number': 2}], 'number': 1}, {'episodes': [{'number': 0}, {'number': 1}, {'number': 2}], 'number': 2}], 'ids': {'tvdb': '260449'}, 'title': 'Vikings'}

关于python - 用额外的值更新字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754236/

相关文章:

c# - Dictionary<string, List<Tuple<string, int>>> dict_Info_A = new Dictionary<string,List<Tuple<string,int>>>();

python - 为什么在这种特殊情况下没有定义 y ?

python - 如何在链式操作中引用当前版本的 Pandas 数据框

python - 如何在单独的文件中定义回调? (阴谋破折号)

python - Pandas:计算数据框中相同值的索引成对出现次数

Java 映射和原语

swift - 将许多不同对象保存到核心数据的最佳方法

c++ - map 的默认排序

c# - 列表包含字典包含列表

python - 如何检查 Django 中的两个模型是否相等?