【问题标题】:process data in a list of tuples that resides in a list处理驻留在列表中的元组列表中的数据
【发布时间】:2023-03-05 17:34:02
【问题描述】:

我在列表中有一个元组列表,如下所示,sof = [[], [('ABC', '0703', '', '', '', '', '', ''), ('ABC', '0702', '', '', '', '', '', '')], [('CDF', '0702', '', '', '', '', '', ''), ('CDF', '0702', '', '', '', '', '', '')] , [('', '', '', '', '', '', 'XYZ', '0702')]]

我想处理该列表中的数据以将其保存在字典中,同时跳过冗余重复数据为 dic = { 'ABC' :0703 , 'CDF': 0702 , 'XYZ' : 0702 },

到目前为止,我正在使用 3 个内部循环来遍历这些元组中的值,如下所示,

for i in sof: for j in i: for k in j: print(k)

【问题讨论】:

标签: python dictionary tuples


【解决方案1】:

试试:

sof = [
    [],
    [
        ("ABC", "0703", "", "", "", "", "", ""),
        ("ABC", "0702", "", "", "", "", "", ""),
    ],
    [
        ("CDF", "0702", "", "", "", "", "", ""),
        ("CDF", "0702", "", "", "", "", "", ""),
    ],
    [("", "", "", "", "", "", "XYZ", "0702")],
]

out = {}
for subl in sof:
    for tpl in subl:
        tpl = [t for t in tpl if t != ""]
        if len(tpl) == 2:
            out[tpl[0]] = tpl[1]

print(out)

打印:

{'ABC': '0702', 'CDF': '0702', 'XYZ': '0702'}

【讨论】:

  • 我在测试后注意到,如果使用相同的代码有不同的日期,您的算法将选择最后一个,例如:如果我将这些元组添加到 sof 列表中:("CDF", "0630", "", "", "", "", "", ""), ("CDF", "0630", "", "", "", "", "", ""),输出将。 {'ABC': '0702', 'CDF': '0630', 'XYZ': '0702'} 而不是为不同的日期添加两个代码。 {'CDF':0630 ,'CDF':0702}.
  • @Alani 是的,Python 字典只能保存唯一键。您想保留哪个值?
  • ahaa 一个唯一的键,我会保留 'CDF': 0702 以防有两个值,在这种情况下,其他代码也可能有不同的值。
  • @Alani 有什么规则为什么要保留 0702?因为值是第一个?
  • if subl[1] == '0706': out[subl[0]] = subl[1] 我添加这条规则是为了只输入我想要的日期,谢谢你提醒我,
【解决方案2】:

调整 Andrej Kesely 解决方案以在字典理解中使用 Walrus 运算符

out = {p[0]:p[1] for subl in sof for tpl in subl if (p:=[t for t in tpl if t != ""])}
# out:
# {'ABC': '0702', 'CDF': '0702', 'XYZ': '0702'}

【讨论】:

  • 谢谢你,看看你的代码。
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多