Python 多字典时间复杂度体系结构

Python 多字典时间复杂度体系结构,python,Python,我想知道是否有人愿意帮助我为以下目标确定最有效的时间复杂度方法: 我想打印一份来自3本词典的全面且非冗余的结果列表。我还希望字典之间匹配的条目合并到一行,如果不匹配,则用“NA”填充这些条目。到目前为止,我的方法如下: for key in dict1: if key in dict2 and key in dict3: output.write(str(dict1[key][0]) + "\t" + str(dict2[key][0]) + "\t" + str(dic

我想知道是否有人愿意帮助我为以下目标确定最有效的时间复杂度方法:

我想打印一份来自3本词典的全面且非冗余的结果列表。我还希望字典之间匹配的条目合并到一行,如果不匹配,则用“NA”填充这些条目。到目前为止,我的方法如下:

for key in dict1:
    if key in dict2 and key in dict3:
        output.write(str(dict1[key][0]) + "\t" + str(dict2[key][0]) + "\t" + str(dict3[key][0]))
    elif key not in dict2 and key in dict3:
        output.write(str(dict1[key][0]) + "\t" + "NA" + "\t" + str(dict3[key][0]))
    elif key in dict2 and key not in dict3:
        output.write(str(dict1[key][0]) + "\t" + str(dict2[key][0]) + "\t" + "NA")
    else:
        output.write(str(dict1[key][0]) + "\t" + "NA" + "\t" + "NA")
for key in dict2:    
    if key not in dict1 and key in dict3:
        output.write("NA" + "\t" + str(dict2[key][0]) + "\t" + str(dict3[key][0]))
    elif key not in dict1 and key not in dict3:
        output.write("NA" + "\t" + str(dict2[key][0]) + "\t" + "NA")   
for key in dict3:
    if key not in dict2 and key not in dict3:
        output.write("NA" + "\t" + "NA" + "\t" + str(dict3[key][0]))

我觉得有一种更有效的方法(就时间复杂度而言)来构建这个。我正在处理大文件,如果能帮助我加快代码速度,我将不胜感激。我是计算机科学的新手,因此如果可能的话,我希望避免使用额外的软件包(不过这些技巧仍然值得赞赏!),并将重点放在基本架构上,以确保我在前进的过程中具备强大的基本技能。

就复杂性而言,这里没有多少可以改进的地方。你正在一个接一个地消除可能性,这真的是你能走的最快的速度

每个键和字典只能进行一次成员身份检查,但字典中的成员身份检查是O(1),因此我怀疑这会影响性能

Python确实有pandas模块,它只需一行就可以完成您需要的功能:

脚本: 输出:
为什么不在
set(dict1.keys())| set(dict2.keys())| set(dict3.keys())
上循环并测试联合中的每个元素是否在每个键集中。最优复杂性?不知道。。。。但可读性很强。在这种情况下,复杂性绝对是一个优先考虑的问题。非常感谢你的建议!非常感谢你!您知道如何实现pandas,以便为包含列表列表作为值的字典打印格式整齐的列吗?我可以处理整个值,或者更好地处理内部和外部列表中的特定字段。
first=dict(a=1,b=3,c=5)
second=dict(d=1,b=5,f=5)
third=dict(f=1,q=3,a=5)
import pandas as pd
df=pd.DataFrame.from_dict(dict(first=first,second=second,third=third),)
print(df)
   first  second  third
a    1.0     NaN    5.0
b    3.0     5.0    NaN
c    5.0     NaN    NaN
d    NaN     1.0    NaN
f    NaN     5.0    1.0
q    NaN     NaN    3.0