如何将给定值和键作为元组的元组创建字典

2024-09-29 23:17:39 发布

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

我正在尝试编写一个函数,该函数将创建一个字典,给定值和键作为元组的元组。 例如

long2wide ( ((" apple ","red "),(" banana "," yellow "),(" banana "," green "),
(" apple "," green "),(" cherry "," red "))
, (" fruit ", " colour ") )

返回

{'fruit': ['apple', 'banana', 'banana', 'apple', 'cherry'], 'colour': ['red', 'yellow', 'green', 'green', 'red']}

以下是我现在掌握的(错误)代码:

def long2wide(data, headers):
    dictionary = {}
    for entry in headers:
        for i in range(len(data)): #Iterate through each row of data
            for j in range(len(data[0])): #Iterate through each column of data
                dictionary[(headers)] = data[i][j]
    return dictionary

我当前的输出是{'fruit':'red','color':'red'}

:(

如果有人能帮助调试/解决此问题,我将不胜感激。谢谢


Tags: 函数inapplefordatadictionarygreenred
3条回答

您可以将元组加载到数据帧中,然后再重新加载到字典中

data=(
    (" apple ","red "),
    (" banana "," yellow "),
    (" banana "," green "),
    (" apple "," green "),
    (" cherry "," red ")
)
headers= (" fruit ", " colour ") 

df=pd.DataFrame(data,columns=headers)
a_dict=df.to_dict()
for key,item in a_dict.items():
   print(key)
   for i in np.arange(len(item)):
       print(item[i])

输出:

fruit 
  apple 
  banana 
  banana 
  apple 
  cherry 
colour 
  red 
  yellow 
  green 
  green 
  red 

或者,您可以直接将数据键值对加载到字典中,并将标题用作索引

  headers= ((" fruit ",0),(" colour ",1)) 

  dct = dict((y, x) for x, y in data)        
  print(dct)

输出:

  {'red ': ' apple ', ' yellow ': ' banana ', ' green ': ' apple ', ' red ': ' cherry '}

我就是这样做的:

def long2wide(data, headers):
    dictionary = {}
    for count, entry in enumerate(headers):
        dictionary[entry] = [i[count] for i in data]
    return dictionary

输出为{' fruit ': [' apple ', ' banana ', ' banana ', ' apple ', ' cherry '], ' colour ': ['red ', ' yellow ', ' green ', ' green ', ' red ']}

当标题数量未定义时,也可以使用此代码

这是通过列表理解完成的。我们为标题中的每个项目创建一个列表。然后,我们循环遍历数据,并根据头的计数,在每个数据元组中添加一个元素,这意味着取决于我们迭代遍历的头

如果您真的喜欢列表理解,您可以将其进一步缩小为:

dictionary = {entry: [i[count] for i in data] for count, entry in enumerate(headers)}

但我不推荐这个,因为它会变得凌乱和难以阅读

对于任意数量的字段,也许

def long2wide(values, names):
    d = dict()
    for i in range(len(names)):
        d[names[i]] = [v[i] for v in values]
    return d

或者,如果您喜欢一行:

{n: [v[i] for v in values] for i,n in enumerate(names)}

其中values是您的第一个列表names是您的第二个列表

相关问题 更多 >

    热门问题