簡體   English   中英

Python:從列表中元組中的字典中獲取字典值並對其進行處理

[英]Python: get dictionary value from a dictionary within a tuple within a list and do something with it

我碰巧使自己陷入了某種復雜的境地(至少對我而言)。

我有一個列表,其中包含一個元組,其中包含來自字典itertools的多個combinations和一個值,如下所示:

[({'a':'1,2,3','b':'2','c':'3'},0.25),({'a':'3,4,5','b':'4','c':'6'},0.50),({'a':'10,4,3','b':'6','c':'4'},0.25)

我只需要獲取某些鍵的值即可進行所需的計算。 比方說,我想獲得的相關'a'的每個字典,元組中的另外一個解釋:

for tuple in list:
    for dict in tuple:
        a = dict.get('a')
        for a_triplet in intertools.combinations(a, 2):
            np.correlate(a,b) for a,b in tuple

我知道這段代碼可能對你們中的許多人來說太糟糕了,但是我對python(以及一般而言的編碼)是陌生的,並且對通過元組和字典進行迭代了解不多。

更新

輸入示例:

[({'url': 'https://ca.finance.yahoo.com/q/hp?s=QEC.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m&z=66&y=66', 'varreturns': '0.847771901', 'sdreturns': '0.920745296', 'name': 'Questerre Energy Corp (QEC.TO)', 'avgreturns': '1.292727273'}, 0.25), ({'url': 'https://ca.finance.yahoo.com/q/hp?s=RBA.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m&z=66&y=66', 'varreturns': '16.6860534', 'sdreturns': '4.084856595', 'name': 'Ritchie Bros Auctioneers Inc (RBA.TO)', 'avgreturns': '20.71140496'}, 0.5), ({'url': 'https://ca.finance.yahoo.com/q/hp?s=RDK.TO&a=02&b=2&c=2005&d=02&e=2&f=2015&g=m&z=66&y=66', 'varreturns': '0.038118899', 'sdreturns': '0.195240618', 'name': 'Redhawk Resources Inc (RDK.TO)', 'avgreturns': '0.400330579'}, 0.25)]

每個元組是不同的股票,通過itertools分配了不同的權重

通過代碼給出:

import itertools
import csv

names = []
stocks = []
with open('AbCtest.csv', 'rU') as csvfile:
    reader = csv.DictReader(csvfile)
    document = reader
    for row in reader:
        stock = row
        stocks.append(row)
        name = row['name']
        names.append(name)

weights_list = [(0.95, 0.025, 0.025),
               (0.90, 0.05, 0.05),
               (0.85, 0.075, 0.075),
               (0.80, 0.1, 0.1),
               (0.75, 0.125, 0.125),
               (0.70, 0.15, 0.15),
               (0.65, 0.175, 0.175),
               (0.60, 0.20, 0.20),
               (0.55, 0.225, 0.225),
               (0.50, 0.25, 0.25)]
def portfolios(document, weights_list):
    for stock_triplet in itertools.combinations(document, 3):
        for weights in weights_list:
            unique_weight_orders = set(itertools.permutations(weights))
            for weight_order in unique_weight_orders:
                yield zip(stock_triplet, weight_order)

for port in portfolios(stocks,weights_list):
    print port

有希望的輸出示例:

10.778966942999999

給出者:

('avgreturns' * weight) + ('avgreturns' * weight) + ('avgreturns' * weight)

#or, from taking the values given in "example of input"

(0.400330579*0.25)+(20.71140496*0.5)+(1.292727273*0.25)

至於相關部分:

我知道這會困難得多,並且可能需要再次使用itertools

假設我們在“示例輸入”中為每個元組命名:“ a”,“ b”和“ c”。 我們如何找到“ a”和“ b”,“ b”和“ c”以及“ a”和“ c”之間的相關性?

對於“示例輸入”中“ avgreturns”的所有可能組合:

corr_ab = numpy.correlate('avgreturns','avgreturns')
corr_ac = numpy.correlate('avgreturns','avgreturns')
corr_cb = numpy.correlate('avgreturns','avgreturns')

感謝收到的任何幫助!

干杯!

print(sum(float(d['avgreturns'])* b for d,b in l))

如果您想要a,ba,c和b,c,請使用itertools.combinations

from itertools import combinations
r = [float(d['avgreturns']) * b for d, b in l]
p = combinations(r,2) 
print(sum(r))
products = [int(my_dict.get('a',0))*b for my_dict,b in my_list]

可能就是您想要的...?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM