【问题标题】:Merged 2 List into Dictionary without losing any Element in Python将 2 个列表合并到字典中而不会丢失 Python 中的任何元素
【发布时间】:2021-06-14 12:14:25
【问题描述】:

我有 2 个列表,列表 A 和列表 B 的长度值总共为 35。但是,当我合并 2 个列表时,其中一个元素消失了,长度变小变成 33。有没有办法将 2 个列表变成 dict 而不会丢失任何元素?我尝试了 zip 和普通的 for 循环,但仍然丢失了一些东西。

listA = ['Produkttyp', 'Integrerade komponenter', 'Spårningsdata', 'Bärstil', 'Urtavla', 'Satta mål', 'Funktioner', 'EAN', 'MPN', 'Typ', 'Upplösning', 'Mått (BxH)', 'Trådlöst gränssnitt', 'Typ', 'Batteritid', 'Information om boetten', 'Namn', 'Storlek', 'Fits Wrist with Circumference', 'Låstyp', 'Material', 'Färg', 'Bredd', 'Djup', 'Längd', 'Vikt', 'Förinstallerad programvara', 'Vibrerande alarm', 'Material', 'Skydd', 'Inkluderade tillbehör', 'Emballagets bredd', 'Emballagets djup', 'Emballagets höjd', 'Emballagets vikt']

listB = ['Aktivitetspårare', 'Hjärtfrekvenssensor', 'Distans, tid, brända kalorier, aktivitet, sovaktivitet, hjärtfrekvens, steg tagna, Antal våningar upp, stressnivå, styrka', 'Handled', 'Ja', 'Ja', 'Meddelande om missade samtal, musikfjärrhantering, SMS-meddelande, E-postmeddelande, kamerafjärrkontroll, Bluetooth Smart-teknologi, automatisk övningsigenkänning, notiser via sociala media, Move IQ, accelerometer, miljöljussensor, barometer, hjärtfrekvens, VO2 max', '753759205157', '010-01995-03', 'OLED - monokrom', '128 x 48 pixlar', '6.6 mm x 17.7 mm', 'Bluetooth 4.0, ANT+', 'Pekskärm', '7 dag(ar)', 'Midnattssvart', 'Band', 'L', '148-215 mm', 'Spänne', 'Silikon', 'Svart', '15 mm', '10.5 mm', '223 mm', '21.5 g', 'VO2 Max, Fitness Age, Move IQ', 'Ja', 'Aluminium', 'Vattentät', 'Laddnings-/datakabel', '14.1 cm', '6.9 cm', '6.2 cm', '116.2 g']

dict(zip(listA, listB))

the result will be: 33 only 
'Produkttyp':'Aktivitetspårare'
'Integrerade komponenter':'Hjärtfrekvenssensor'
'Spårningsdata':'Distans, tid, brända kalorier, aktivitet, sovaktivitet, hjärtfrekvens, steg tagna, Antal våningar upp, stressnivå, styrka'
'Bärstil':'Handled'
'Urtavla':'Ja'
'Satta mål':'Ja'
'Funktioner':'Meddelande om missade samtal, musikfjärrhantering, SMS-meddelande, E-postmeddelande, kamerafjärrkontroll, Bluetooth Smart-teknologi, automatisk övningsigenkänning, notiser via sociala media, Move IQ, accelerometer, miljöljussensor, barometer, hjärtfrekvens, VO2 max'
'EAN':'753759205157'
'MPN':'010-01995-03'
'Typ':'Pekskärm'
'Upplösning':'128 x 48 pixlar'
'Mått (BxH)':'6.6 mm x 17.7 mm'
'Trådlöst gränssnitt':'Bluetooth 4.0, ANT+'
'Batteritid':'7 dag(ar)'
'Information om boetten':'Midnattssvart'
'Namn':'Band'
'Storlek':'L'
'Fits Wrist with Circumference':'148-215 mm'
'Låstyp':'Spänne'
'Material':'Aluminium'
'Färg':'Svart'
'Bredd':'15 mm'
'Djup':'10.5 mm'
'Längd':'223 mm'
'Vikt':'21.5 g'
'Förinstallerad programvara':'VO2 Max, Fitness Age, Move IQ'
'Vibrerande alarm':'Ja'
'Skydd':'Vattentät'
'Inkluderade tillbehör':'Laddnings-/datakabel'
'Emballagets bredd':'14.1 cm'
'Emballagets djup':'6.9 cm'
'Emballagets höjd':'6.2 cm'
'Emballagets vikt':'116.2 g'
len():33

【问题讨论】:

  • 如果您的字典中有重复的键,那么它们将被最近的键覆盖,从而解释键的数量较少。
  • 第一个列表中有两个'Typ',所以由于字典有唯一的键,第一个被第二个覆盖。此代码按预期工作。

标签: python python-3.x python-3.5


【解决方案1】:

listA 包含两个重复项(“Material”和“Typ”)。字典不能有重复的键,这解释了为什么您在字典中看到的条目较少。

如果您有重复的键,最好的方法是使字典的值成为一个列表,而不是如下创建的单个项目:

字典有 33 个键,但有 35 个值,因为 'Typ' 和 'Material' 的条目在列表中包含 2 个项目。

d = dict()

for key, val in zip(listA, listB):
    if key in d:
        d[key].append(val)
    else:
        d[key] = [val]

如果我们再看一下“Typ”的条目,我们会看到:

d['Typ']
['OLED - monokrom', 'Pekskärm']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2021-08-11
    • 1970-01-01
    • 2015-05-02
    • 2019-03-12
    相关资源
    最近更新 更多