题目是这样的:

给定一个字典dict1,将其转换成dict2:
dict1 = {
'fetal':[{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': 23}, {u'key': u'sjzx_sy21_121.201.56.4', u'doc_count': 4}],
'warning':[{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': 30}, {u'key': u'sjzx_sy21_121.201.56.4', u'doc_count': 50}]
} dict2 = {'sjzx_sy22_121.201.56.5': [{'fetal': 23}, {'warning': 30}], 'sjzx_sy21_121.201.56.4': [{'fetal': 4}, {'warning': 50}]}

脑子摩擦了一个下午:

dict1 = {
'fetal': [{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': 23},
{u'key': u'sjzx_sy21_121.201.56.4', u'doc_count': 4}],
'warning': [{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': 30},
{u'key': u'sjzx_sy21_121.201.56.4', u'doc_count': 50}]
} def getvalue(dictcome, key):
retdict = {}
for item in dictcome.get(key): # 遍历传入字典的key为传入key值的对应value,item为{'key': 'sjzx_sy22_121.201.56.5', 'doc_count': 23}
valuelist = list(item.values()) # 将item的value值保存为列表
# ['sjzx_sy22_121.201.56.5', 23]//['sjzx_sy21_121.201.56.4', 4]
retdict[valuelist[0]] = {key: valuelist[1]} # 保存为dict2字典的格式,主要是提取dict2的key
return retdict # {'sjzx_sy22_121.201.56.5': {'fetal': 23}, 'sjzx_sy21_121.201.56.4': {'fetal': 4}} def combindtwo(dicta, dictb): # 合并两个字典,key值唯一,相同key对应的value保存为列表格式
for i,j in dictb.items():
if i in dicta.keys():
listtmp = [dicta.get(i), j]
dicta.update({f'{i}': listtmp})
else:
dicta.update({f'{i}': dictb[i]})
return dicta tmplist = [] for key in dict1.keys():
tmplist.append(getvalue(dict1, key)) # 这里按dict1的key值调用getvalue参数,将dict1换一种格式输入
# 将获取到的字典保存在列表里,但是下面调用combindtwo函数时,我是直接用item取的。。。我觉得怪怪的。但不知道该如何做?? print('原字典为:')
print(dict1)
print('修改后的字典如下:')
print(combindtwo(tmplist[0], tmplist[1]))

最后输入结果为:(也算是达到目的了吧= =)

原字典为:
{'fetal': [{'key': 'sjzx_sy22_121.201.56.5', 'doc_count': 23}, {'key': 'sjzx_sy21_121.201.56.4', 'doc_count': 4}], 'warning': [{'key': 'sjzx_sy22_121.201.56.5', 'doc_count': 30}, {'key': 'sjzx_sy21_121.201.56.4', 'doc_count': 50}]}
修改后的字典如下:
{'sjzx_sy22_121.201.56.5': [{'fetal': 23}, {'warning': 30}], 'sjzx_sy21_121.201.56.4': [{'fetal': 4}, {'warning': 50}]}

然后看一下给我出题的大佬写的程序:

def get_ip_count(d):
result = {}
for key, values in d.items():
for ip_result in values:
# 以 IP 为键,设置值为默认空列表
result.setdefault(ip_result['key'], [])
# result[ip_result['key']] = []
result_count = {}
result_count[key] = ip_result['doc_count']
result[ip_result['key']].append(result_count)
return result if __name__ == '__main__':
d = {'fetal': [{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': 23},
{u'key': u'sjzx_sy21_121.201.56.4', u'doc_count': 4}],
'warning': [{u'key': u'sjzx_sy22_121.201.56.5', u'doc_count': 30},
{u'key': u'sjzx_sy21_121.201.56.4', u'doc_count': 50}]
} result = get_ip_count(d)
print(result)

大佬说:难点在于先构造空字典,构造出空字典之后,在下一个循环又不会被冲掉。

setdefault()方法:

dict.setdefault(key[,default=None])
  • key -- 字典中要查找的键。
  • default -- 可选参数,如果指定键的值不存在时,返回该值,默认为 None。
  • 返回指定键的值,如果指定键的值不在字典中返回指定值,默认为 None。

呵呵。

我要继续努力!

python-关于字典与列表的一个作业的更多相关文章

  1. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

  2. 零基础入门学习Python(11)--列表:一个打了激素的数组(2)

    前言 上节课我们介绍一个打了激素的数组,叫做列表.列表我们比作一个大仓库,你所能够具现化的东西,都可以往里面扔,它包罗万象.另外还介绍了三个往列表添加元素的方法,分别是: append(),exten ...

  3. 零基础入门学习Python(10)--列表:一个打了激素的数组

    前言 有时候我们需要把一些东西暂时保存起来,因为他们有着一些直接或间接的联系,我们需要把它们放在某个组或者集合中,未来可能用得上. 很多接触过编程的朋友都知道,都接触过数组这个概念,那么数组这个概念事 ...

  4. Python把两个列表合成一个字典

    简单粗暴上代码 A= [] B = [] C= dict(map(lambda x,y:[x,y],A,B)) 酱紫,就合成了一个字典

  5. python之字典、列表、元组生成器的使用

    python的生成式在一些类型相互转换的时候可以写出十分优雅的代码.如列表转换成另一个列表.字典.或元组.并且代码的执行效率也比使用for...in...循环高. 列表生成式 列表生成式即生成列表的生 ...

  6. 零基础入门学习Python(12)--列表:一个打了激素的数组(3)

    前言 这节课我们继续谈一下Python列表一些知识 知识点 Python常用操作符 比较操作符 >>> list1 = [123] >>> list2 = [234 ...

  7. python对字典及列表递归排序

    对字典内所有内容进行排升序排序,包括,子数组,子字典 需要注意: 1.字典因为是在一定程序上无序的,所以这里采用了内置包,来变成有序字典 from collections import Ordered ...

  8. Python的字典、列表合并

    字典合并: 在日常工作中需要对字典进行合并操作,下面提供几个操作方法 1.使用dict(a,**b) 例: >>> a={'a':1,'b':2} >>> b={' ...

  9. python 字典和列表嵌套用法

    python中字典和列表的使用,在数据处理中应该是最常用的,这两个熟练后基本可以应付大部分场景了.不过网上的基础教程只告诉你列表.字典是什么,如何使用,很少做组合说明. 刚好工作中采集promethe ...

随机推荐

  1. Maven 学习总结 (七) 之 灵活构建

    一个优秀的构建系统必须足够灵活,他应该能够让项目在不同的环境下都能成功地构建.Maven为支持项目的灵活性,内置了三大特性,即属性.Profile和资源过滤. Maven属性 通过<proper ...

  2. 【Unity游戏开发】UGUI不规则区域点击的实现

    一.简介 马三从上一家公司离职了,最近一直在出去面试,忙得很,所以这一篇博客拖到现在才写出来.马三在上家公司工作的时候,曾处理了一个UGUI不规则区域点击的问题,制作过程中也有一些收获和需要注意坑,因 ...

  3. P3203 [HNOI2010]弹飞绵羊

    LCT裸题,之后填坑打一下 分块做法:每个点存几次出块以及出块的位置,问的时候直接暴力跳就vans了 首先思考最普通的模拟,发现可以O(n)路径压缩,O(1)的查询,但是需要修改就变成了O(n^2)的 ...

  4. java中import详解

    前言 import与package机制相关,这里先从package入手,再讲述import以及static import的作用. package package名称就像是我们的姓,而class名称就像 ...

  5. Learning Feature Pyramids for Human Pose Estimation(理解)

    0 - 背景 人体姿态识别是计算机视觉的基础的具有挑战性的任务,其中对于身体部位的尺度变化性是存在的一个显著挑战.虽然金字塔方法广泛应用于解决此类问题,但该方法还是没有很好的被探索,我们设计了一个Py ...

  6. git查日志命令

    git常用命令 1.创建仓库 a.当前目录创建仓库,即把当前目录的文件开始用git管理,该命令会在当前目录下创建一个.git目录 git init b.指定目录创建仓库 git init 目录名 2. ...

  7. 理解 Linux 的硬链接与软链接【转】

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html 从 inode 了解 Linux 文件 ...

  8. ABP代码生成器与升级到VS2017VSIX

    首先,我不是要分享一个代码生成器,而是怎么升级到VS2017,简单介绍下 如何将2015的VSIX项目升级到2017 阳光铭睿 写了一篇<分享一个与ABP配套使用的代码生成器源码>,并在群 ...

  9. SQL Server 数据库限制单用户使用和解除单用户使用

    一个在单用户(SINGLE_USER)模式下的数据库一次只能有一个连接.在限制用户(RESTRICTED_USER)模式下的数据库只能接受被认为是“合格”用户的连接——这些用户属于dbcreator或 ...

  10. 【转载 | 笔记】IIS无法删除应该程序池 因为它包含X个应用程序

    IIS无法删除应该程序池 因为它包含X个应用程序 今天代码主分支在vs2015创建了虚拟目录http://localhost/webapp指向的物理路径是E:\webapp 之后新开了一个分支把代码放 ...