比较嵌套列表和编辑

2024-09-30 03:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

抱歉,如果这听起来像一个愚蠢的问题,但这个问题让我真的很困惑。我对python还比较陌生,所以我可能遗漏了一些东西。我做了一些研究,但还没做太多。下面是:

我将使用一个简单的例子,使问题更清楚,我的数据是不同的,但格式和所需的行动是相同的。我们有一个关于人们和他们吃的比萨饼的数据库(还有其他一些数据)。然而,我们的数据库有多个相同的人的条目,他们有不同的披萨(因为我们合并了从不同披萨店获得的数据)。你知道吗

示例数据集:

allData = [['joe','32', 'pepperoni,cheese'],['marc','24','cheese'],['jill','27','veggie supreme, cheese'],['joe','32','pepperoni,veggie supreme']['marc','25','cheese,chicken supreme']]

我们注意到的几件事和我想遵循的规则:

  • 名字可以出现多次,虽然在这个特定的情况下,我们知道任何条目与相同的名字是同一个人。

  • 同一个人在不同的条目中的年龄可能不同,因此我们只需选择遇到的第一个年龄并使用它。示例marc的年龄是24,我们忽略第二个条目的25

我想编辑数据,使一个人的名字只出现一次,他吃的比萨饼是一个唯一的集合,从所有条目同名。如前所述,年龄只是第一次遇到。因此,我希望最终数据如下所示:

fixedData = [['joe','32','pepperoni,cheese,veggie supreme'],['marc','24','cheese,chicken supreme'],['jill','27','veggie supreme, cheese']]

我在想:

fixedData = []
for i in allData:
    if i[0] not in fixedData[0]:    
        fixedData.append[i]
    else:
        fixedData[i[-1]]=set(fixedData[i[-1]],i[-1])

我知道我犯了好几个错误。你能给我指一下正确的方向吗?你知道吗

多谢了。你知道吗


Tags: 数据数据库示例条目marc名字joe年龄
2条回答

因为名称是唯一的,所以在dict中使用它们作为键是有意义的,其中名称就是键。这在您的情况下更合适:

>>> d = {}
>>> for i in allData:
    if i[0] in d:
        d[i[0]][-1] = list(set(d[i[0]][-1] + (i[-1].split(','))))
    else:
        d[i[0]] = [i[1],i[2].split(',')]


>>> d
   {'jill': ['27', ['veggie supreme', ' cheese']], 'joe': ['32', ['pepperoni', 'cheese', 'pepperoni', 'veggie supreme']], 'marc': ['24', ['cheese', 'cheese', 'chicken supreme']]}

在像你这样的情况下,我喜欢使用defaultdict。我真的很讨厌列表索引带来的猜测。你知道吗

from collections import defaultdict

allData = [['joe', '32', 'pepperoni,cheese'],
           ['marc', '24', 'cheese'],
           ['jill', '27', 'veggie supreme, cheese'],
           ['joe', '32', 'pepperoni,veggie supreme'],
           ['marc', '25', 'cheese,chicken supreme']]

d = defaultdict(dict)
for name, age, pizzas in allData:
    d[name].setdefault('age', age)
    d[name].setdefault('pizzas', set())
    d[name]['pizzas'] |= set(pizzas.split(','))

注意使用setdefault来设置我们遇到的第一个年龄值。它还支持使用set union来获得唯一的pizza。你知道吗

相关问题 更多 >

    热门问题