python 如何在工作代码中用字典替换列表/元组以提高其性能?

polhcujo  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(136)

我有这段代码,它工作正常,是最小的和可重复的。它使用liststuples。鉴于列表和元组对大量数据的缓慢,我想改变整个设置,并使用dictionaries来加快性能。
所以我想把这个队列块转换成类似于字典的东西。
这段代码的目的是创建变量xy(数学数据的计算),并使用append和元组将它们添加到列表中,然后出于某些目的挖掘这些数字。
我如何在需要的地方添加dictionaries并替换为list/append代码?谢谢!

带元组和列表的版本

mylist = {('Jack', 'Grace', 8, 9, '15:00'): [0, 1, 1, 5], 
         ('William', 'Dawson', 8, 9, '18:00'): [1, 2, 3, 4], 
         ('Natasha', 'Jonson', 8, 9, '20:45'): [0, 1, 1, 2]}

new = []

for key, value in mylist.items():

    #create variables and perform calculations
    calc_x= sum(value)/ len(value)
    calc_y = (calc_x *100) / 2

    #create list with 3 tuples inside
    if calc_x > 0.1:
        new.append([[key], [calc_x], [calc_y]])

print(new)
print(" ")

#example for call calc_x
print_x = [tuple(i[1]) for i in new]
print(print_x)

我想写这样的东西,但我觉得不合适,所以看都不要看。如果可能的话,我有两个要求:

  • 我希望sum(value)/ len(value)(calc_x *100) / 2继续拥有自己的变量calc_xcalc_y,以便它们可以在append中单独调用***,如您所见
  • new变量中,我希望能够在需要我的时候调用变量,例如for example i do for print_x = [tuple(i[1]) for i in new]。谢谢
ndasle7k

ndasle7k1#

如果确实想提高性能,可以使用Pandas(或Numpy)对数学运算进行矢量化:

import pandas as pd

# Transform your dataset to DataFrame
df = pd.DataFrame.from_dict(mylist, orient='index')

# Compute some operations
df['x'] = df.mean(axis=1)
df['y'] = df['x'] * 50

# Filter out and export
out = df.loc[df['x'] > 0.1, ['x', 'y']].to_dict('split')
new = dict(zip(out['index'], out['data']))

输出:

>>> new
{('Jack', 'Grace', 8, 9, '15:00'): [1.75, 87.5],
 ('William', 'Dawson', 8, 9, '18:00'): [2.5, 125.0],
 ('Natasha', 'Jonson', 8, 9, '20:45'): [1.0, 50.0]}
rnmwe5a2

rnmwe5a22#

new_dict = {}

for key, value in mylist.items():
    #create variables and perform calculations
    calc_x= sum(value)/ len(value)
    calc_y = (calc_x *100) / 2

    #add values to dictionary
    if calc_x > 0.1:
        new_dict[key] = [calc_x, calc_y]

print(new_dict)

#example for call calc_x
print_x = {k:v[0] for k,v in new_dict.items()}
print(print_x)

相关问题