Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 抄写字典目录_Python_List_Dictionary - Fatal编程技术网

Python 抄写字典目录

Python 抄写字典目录,python,list,dictionary,Python,List,Dictionary,我有这种python字典列表 [ { "compania": "Fiat", "modelo": "2014", "precio": "1000" }, { "compania": "Renault", "modelo": "2014", "precio": "2000" }, { "compania": "Volkwagen", "modelo": "2014", "precio

我有这种python字典列表

[
  {
    "compania": "Fiat",
    "modelo": "2014",    
    "precio": "1000"
  },
  {
    "compania": "Renault",
    "modelo": "2014",    
    "precio": "2000"
  },
  {
    "compania": "Volkwagen",
    "modelo": "2014",    
    "precio": "3000"
  },
  {
    "compania": "Chevrolet",
     "modelo": "2014",    
     "precio": "1000"    
  },
  {
    "compania": "Peugeot",
    "modelo": "2014",    
    "precio": "2000"
  } 
]  
我想转换成这样的字典列表

{   
  "Fiat": {
    "modelo": "2014",    
    "precio": "1000"
  },
  "Renault": {
    "modelo": "2014",    
    "precio": "2000"
  },
  "Volkwagen": {
    "modelo": "2014",    
    "precio": "3000"
  },
  "Chevrolet": {
    "modelo": "2014",    
    "precio": "1000"
  },
  "Peugeot": {
    "modelo": "2014",    
    "precio": "2000"
  }  
}

您可以通过迭代原始列表中的元素来创建字典。假设您的列表称为car_list:


我们可以使用听写理解

{a.get('compania'): {k: v for k, v in a.items() if k != 'compania'} for a in c}

{'Fiat': {'modelo': '2014', 'precio': '1000'},
 'Renault': {'modelo': '2014', 'precio': '2000'},
 'Volkwagen': {'modelo': '2014', 'precio': '3000'},
 'Chevrolet': {'modelo': '2014', 'precio': '1000'},
 'Peugeot': {'modelo': '2014', 'precio': '2000'}}

其中c是您的原始数据

假设您的列表名为l,您可以通过简单的迭代和构建新的字典d来实现这一点:

这将在字典d中生成:


说明:对于该列表中的每个字典,sub:sub.pop'compania'删除sub中键'compania'的条目并返回其关联值。然后,我们将更新字典d,使其具有刚返回内容的键,并将该键与删除该条目后的sub剩余部分关联。

使用映射器函数返回新的自定义dict列表

a=[
  {
    "compania": "Fiat",
    "modelo": "2014",    
    "precio": "1000"
  },
  {
    "compania": "Renault",
    "modelo": "2014",    
    "precio": "2000"
  },
  {
    "compania": "Volkwagen",
    "modelo": "2014",    
    "precio": "3000"
  },
  {
    "compania": "Chevrolet",
     "modelo": "2014",    
     "precio": "1000"    
  },
  {
    "compania": "Peugeot",
    "modelo": "2014",    
    "precio": "2000"
  } 
]  

def mapper(temp): # define a mapper
    new_temp={}
    new_temp[temp['compania']]={k:v for k,v in temp.items() if k!='compania'}
    return new_temp

map(mapper,a) # call map function with mapper and list as argument
输出:

{'Chevrolet': {'modelo': '2014', 'precio': '1000'},
 'Fiat': {'modelo': '2014', 'precio': '1000'},
 'Peugeot': {'modelo': '2014', 'precio': '2000'},
 'Renault': {'modelo': '2014', 'precio': '2000'},
 'Volkwagen': {'modelo': '2014', 'precio': '3000'}}

我想分享一个简单的解决方案:

>>> {d.pop("compania"):d for d in dd}

您只需使用dictionary即可生成您喜欢的新词典

from pprint import PrettyPrinter as pp
d={}
for i in l: # 'l' represents your list of dictionary 
    d.update({i['compania']:{"modelo":i['modelo'],"precio":i['precio']}})
print(pp(indent=4).pprint(d))
输出:


你试过什么,到底有什么问题?还要注意,您的输出是一个将字符串映射到字典的字典,而不是一个字典列表。那么您尝试了什么呢?这似乎相当简单,只需从列表的每个元素中取出d['compania',],并用它创建一个字典,其余的键值对就是它的内容。谢谢汉克斯,我在工作,一些关于这些问题的书或论文,我是新来的。你为什么要使用像.pop这样的破坏性操作?有什么优势吗?一般来说,除非您试图删除内容,否则我会错误地选择不删除内容。@juanpa.arrivillaga只是因为pop简洁地返回了我们想要用于新词典的键,并且在执行后,会留下与该键相关的值。我知道你是从哪里来的:不要在理解结构中使用.pop,它有副作用,你应该避免在函数结构中使用副作用。正是因为解决方案使用了副作用,所以在这种特殊情况下它很短。
result = {}
for d in l:
    # Store the value of the key 'compania' before popping it from the small dictionary d
    compania = d['compania']
    d.pop('compania')
    # Construct new dictionary with key of the compania and value of the small dictionary without the compania key/value pair
    result[compania] = d
print(result)
{'Chevrolet': {'modelo': '2014', 'precio': '1000'},
 'Fiat': {'modelo': '2014', 'precio': '1000'},
 'Peugeot': {'modelo': '2014', 'precio': '2000'},
 'Renault': {'modelo': '2014', 'precio': '2000'},
 'Volkwagen': {'modelo': '2014', 'precio': '3000'}}
>>> {d.pop("compania"):d for d in dd}
from pprint import PrettyPrinter as pp
d={}
for i in l: # 'l' represents your list of dictionary 
    d.update({i['compania']:{"modelo":i['modelo'],"precio":i['precio']}})
print(pp(indent=4).pprint(d))
{   'Chevrolet': {'modelo': '2014', 'precio': '1000'},
'Fiat': {'modelo': '2014', 'precio': '1000'},
'Peugeot': {'modelo': '2014', 'precio': '2000'},
'Renault': {'modelo': '2014', 'precio': '2000'},
'Volkwagen': {'modelo': '2014', 'precio': '3000'}}