【问题标题】:Sync keys from a dictionary to multiple values in a list将字典中的键同步到列表中的多个值
【发布时间】:2018-06-20 01:15:34
【问题描述】:

我有以下格式的列表字典,

mydict = 

{ a: [1, 2],
  b: [2, 2],
  c: [1, 0],
  d: [1, 1]
}

另一个只有两个元素的列表,

mylist =
    [x, y]

我像这样从mydict 读取值

for key, values in mydict.items():
    print key, values

打印出来,

  a [1, 2]
  b [2, 2]
  c [1, 0]
  d [1, 1]

但我想要以下输出,

x : [1, 2, 1, 1]
y : [2, 2, 0, 1]

这意味着mydict 的第一列和mylist 的第一个值组成了一个字典。

所以我修改了这样的循环,

for key, values in mydict.items():
    newdict = {mylist[0]: mydict[0],
               mylist[1]: mydict[1] 
              }

这给了我想要的输出,

x : [1, 2, 1, 1]
y : [2, 2, 0, 1]

但问题是如果mylistmydict的长度增加了就不行了,我需要手动添加一个新行,

mylist[2]: mydict[2] 

每次在mylist 中添加新值时,如何确保在不添加新行的情况下自动分配键?

PS:mydict 中列表值的长度将始终等于 mylist 的长度。

编辑:

我的输出还应该保留来自mydict 的键值,

x : [1, 2, 1, 1]
y : [2, 2, 0, 1]
keys: a, b, c, d

谢谢

编辑:

        0        1
0       a        [1,2],
1       b        [2,2],
2       c        [1,0],   
3       d        [1,1] 

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    您可以使用zip 2

    dict(zip(['x', 'y'], zip(*dct.values())))
    
    # Result
    {'x': (1, 2, 1, 1), 'y': (2, 2, 0, 1)}
    

    这使用 zip 转置:

    >>> list(zip(*dct.values()))
    [(1, 2, 1, 1), (2, 2, 0, 1)]
    

    如果你想保留你的钥匙:

    dict(zip(['key', 'x', 'y'], zip(*[(i, *j) for i, j in dct.items()])))
    
    # Result
    {'key': ('a', 'b', 'c', 'd'), 'x': (1, 2, 1, 1), 'y': (2, 2, 0, 1)}
    

    【讨论】:

    • 你能解释一下你在那里做了什么吗?我没有检查它,但我也想在mydict 中保存和打印keys 的值,即a,b,c
    • 保存和打印键值是什么意思?
    • 我的意思是在for循环中我应该能够打印{'x': (1, 2, 1, 1), 'y': (2, 2, 0, 1)}keys: a, b, c, d
    • 您需要更新您的问题,以明确您希望输出的内容。
    • 如果我使用你的方法,我会丢失密钥也是*dct.values 表示mydict
    【解决方案2】:

    如果您正在处理大数据,您可以使用pandas

    import pandas as pd
    
    mydict = { 'a': [1, 2],
      'b': [2, 2],
      'c': [1, 0],
      'd': [1, 1]}
    
    df = pd.DataFrame(mydict)
    
        0   1
    a   1   2
    b   2   2
    c   1   0
    d   1   1
    

    那么你可以得到,例如

    >>> df.columns = ['x', 'y'] # where ['x', 'y'] is your obj my_list
    >>> df.to_dict('list')
    
    {'x': [1, 2, 1, 1], 'y': [2, 2, 0, 1]}
    

    保留钥匙

    >>> d = df.to_dict('list')
    >>> d.update({'keys':df.index.tolist()})
    

    【讨论】:

    • 我不知道什么是大数据,我没有使用它
    • 我的意思是如果你的列表和字典非常非常大:)
    • 我更喜欢你的做法,因为我现在有 1000 行,直到现在才意识到这更好。我试过你的答案,但它不起作用。你能检查更新的问题吗?我添加了df = pd.DataFrame(mydict.items()) 的输出
    • @MaverickD 使用 pd.DataFrame(mydict) 而不是 pd.DataFrame(mydict.items()) :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2014-04-22
    • 2021-09-17
    • 2021-11-17
    相关资源
    最近更新 更多