用其他字典中的特定对创建字典

时间:2020-09-23 19:05:05

标签: python list dictionary for-loop

此列表:

count.index.names

给予

data=[[{'t1':'text1.txt','date1':'class1'}],[{'t2':'text2.txt','date2':'class2'}]]
data

,我想把它变成这样: 添加了 EDIT 括号

[[{'t1': 'text1.txt', 'date1': 'class1'}],
 [{'t2': 'text2.txt', 'date2': 'class2'}]]

这意味着:

创建一个列表,其中的每个子列表将由一个词典组成,其中将是第一个子列表中第一个词典的 value ,而< strong> value 将是第一个子列表的第二个字典的 value ,以此类推。

我的尝试是这样的:

[[{'text1.txt': 'class1'}], [{'text2.txt': 'class2'}]]

4 个答案:

答案 0 :(得分:2)

遍历嵌套列表中的每个字典,并通过julia_setup方法为每个 public static int findMultipleOfThree(int[] arr) { int max_index = -1; //if it does not find a multiple of 3 it will return -1 for (int i = 0; i < arr.length-1; i++) { if(arr[i]%3==0) { if(i>max_index) max_index = i; } } return arr[max_index]; } 这样的字典创建一个元组。转换为元组后,您可以使用values()从元组创建字典,像这样tuple(dict.values())

注意::如果您的词典中只有两个键,则只有它可以工作。

dict()

输出:

dict([tuple(dict.values())])

答案 1 :(得分:0)

尝试一下:

data=[[{'t1':'text1.txt','date1':'class1'}],[{'t2':'text2.txt','date2':'class2'}]]

all_vals = [];

for i in data:
    for j in i:
        for key in j:
            all_vals.append(j[key])

new_list = [];            
for i in range(0,len(all_vals)-1):
    if (i % 2) == 0:
        new_dict = {};
        new_dict = {all_vals[i]:all_vals[i+1]}
        new_list.append(new_dict)
    else:
        continue
        
print(new_list)

输出:

[{'text1.txt': 'class1'}, {'text2.txt': 'class2'}]

此代码不管列表的长度如何都有效。

答案 2 :(得分:0)

您的代码完成了大部分工作。您可以添加另一行以获得所需的结果:

In [108]: se
Out[108]: [dict_values(['text1.txt', 'class1']), dict_values(['text2.txt', 'class2'])]

In [109]: [[{list(x)[0]:list(x)[1]} for x in se]]
Out[109]: [[{'text1.txt': 'class1'}, {'text2.txt': 'class2'}]]

答案 3 :(得分:0)

以下功能应将输入转换为您要求的输出。

def convert_to_list_of_list_of_dictionaries(input_dictionaries):
  ret_dictionaries = []
  for inp in input_dictionaries:
    k, v = inp[0].values()
    ret_dictionaries.append({k, v})
  return ret_dictionaries

但是,输入/输出中有些事情很少涉及,并且使数据更难以使用。 在输入端,数据被包装在一个额外的列表中,在这种情况下,该列表不提供任何功能,并迫使您索引内部列表的第一个元素以访问字典k, v = inp[0].values()。在输出方面,我们正在做同样的事情,这使得迭代输出变得更加困难。看起来像这样:

# psuedocode
for kv in reformatted_outputs:
    unwrapped_dict = kv[0]
    key, value = next(iter(unwrapped_dict.items()))
    # process key and value

相反,如果您的输出格式为“ {'text1.txt':'class1','text2.txt':'class2'}`,则可以处理以下数据:

key, value in reformatted_outputs.items():
    # process key and value

如果您有能力修改正在处理的内容的输入和输出,则可以为您节省一些麻烦,也可以为任何正在工作的人省去一些头伤。

如果您想修改输出格式,则函数可能类似于:

def convert_to_single_dictionary(input_dictionaries):
  ret = {}
  for inp in input_dictionaries:
    print(inp)
    # it looks like the input data is being wrapped in an extra list
    k, v = inp[0].values()
    ret[k] = v
  return ret

希望这对您有所帮助,感谢您提出问题!

相关问题