亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何能夠在沒有任何模塊導入的情況下獲取嵌套字典并找到值的中位數?

我如何能夠在沒有任何模塊導入的情況下獲取嵌套字典并找到值的中位數?

aluckdog 2022-09-13 09:58:43
我有一組數據,我根據月份對它們進行了分組,我想得到一個嵌套的字典,并找到每年的中位數......我該如何編寫代碼?我剛剛開始使用Python,所以我希望代碼可以清晰易懂。dictionary = {1: [                  [2019, 28.7],                   [2019, 29.4],                   [2019, 29.7],                   [2020, 28.6],                   [2020, 28.7],                   [2020, 28.0]                 ],              2:[                 [2018, 26.9],                  [2018, 28.2],                   [2018, 28.5],                  [2019, 29.9],                 [2019, 29.8],                  [2019, 28.7]                ]}desired output = {1: {2019: 29.4, 2020: 28.7},                  2: {2018: 28.2, 2019: 29.8}} 非常感謝所有做出貢獻的人!我已經解決了這個問題。
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

您可以使用字典理解:itertools.groupby


from itertools import groupby

from statistics import median


{k : {y : median((e[1] for e in g)) for y, g in groupby(v, key=lambda x: x[0])} for k, v in dictionary.items()}

輸出:


{1: {2019: 29.4, 2020: 28.6}, 2: {2018: 28.2, 2019: 29.8}}

上述解決方案有效,因為您的數據是按年份排序的


或者你可以使用 2 個帶有集合的循環:for


from collections import defaultdict


output = {}


for k, v in dictionary.items():

    year_value = defaultdict(list)

    for y, val in v:

        year_value[y].append(val)


    output[k] = {y: median(v) for y, v in year_value.items()}


print(output)

輸出:


{1: {2019: 29.4, 2020: 28.6}, 2: {2018: 28.2, 2019: 29.8}}


查看完整回答
反對 回復 2022-09-13
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

請嘗試以下操作:


dictionary = {1: [[2019, 28.7], [2019, 29.4], [2019, 29.7], [2020, 28.6], [2020, 28.7], [2020, 28.0]],

                  2: [[2018, 26.9], [2018, 28.2], [2018, 28.5], [2019, 29.9], [2019, 29.8], [2019, 28.7]]}


    output = {}

    for obj in dictionary.keys():

        temp = {}

        for i in dictionary[obj]:

            if i[0] not in temp:

                temp[i[0]] = [i[1]]

            else:

                temp[i[0]].append(i[1])

        output[obj] = temp


    for i in output.keys():

        for j in output[i].keys():

            output[i][j].sort()

            n = len(output[i][j])

            if n % 2 == 0:

                median_1 = output[i][j][n // 2]

                median_2 = output[i][j][n // 2 - 1]

                median = (median_1 + median_2) // 2

            else:

                median = output[i][j][n // 2]

            output[i][j] = median


    print(output)


查看完整回答
反對 回復 2022-09-13
  • 2 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號