如何比较组件版本并在dict的python列表中找到最新版本?

如何比较组件版本并在dict的python列表中找到最新版本?,python,Python,我有一个简单的dict组件清单要安装 components = [ {"component1": "0.1"}, {"component2": "0.2"}, {"component1": "0.3"}, {"component1": "0.2"}, {"component2": "1.0"} ] 组件可能相同,但版本不同。我想获得最新版本的组件列表。所以,预期的结果是 latest_components = [ {"component1": "

我有一个简单的dict组件清单要安装

components = [
    {"component1": "0.1"},
    {"component2": "0.2"},
    {"component1": "0.3"},
    {"component1": "0.2"},
    {"component2": "1.0"}
]
组件可能相同,但版本不同。我想获得最新版本的组件列表。所以,预期的结果是

latest_components = [
    {"component1": "0.3"},
    {"component2": "1.0"}
]

相互比较组件的最佳方法是什么?我试图用bash解决它,但它看起来像垃圾,所以我想用python使它更具可读性。

实现这一点的一个例子可能是:

components = [
    {"component1": "0.1"},
    {"component2": "0.2"},
    {"component1": "0.3"},
    {"component1": "0.2"},
    {"component2": "1.0"}
]
result = dict()
for d in components:
    for key, value in d.items():
        if key in result:
            if float(result[key])<float(value):
                result[key]=value
            else:
                continue
        else:
            result[key] = value
print(result)

一行。适用于多级版本(1.2.4.7…)


请尝试使用此功能,或者利用for循环进行尝试并使用它将对您有所帮助。如果您安装了
pandas
[{k:v}用于k,在pd.DataFrame(components,dtype=float.max()。to_dict().items()]
@HenryYik谢谢!但它必须是没有依赖项的小型内置脚本……当组件的位数超过2位时,您的解决方案效果良好,如0.1.3.0thanks@approximatenumberI没有考虑使用多个数字比较版本(对于.9和.11)。现在没事了
{'component1': '0.3', 'component2': '1.0'}
{c:'.'.join(map(str,v)) for c,v in sorted([c,list(map(int, v.split('.')))] for l in components for c,v in l.items())}