python提取字典嵌套列表的值,列表嵌套字典,添加元素问题?

"""已知列表li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}] ,定义一个函数,将该列表按照其元素的value值进行排序,并输出结果"""思路很清晰,新建一个列表,然后遍历取出字典的值加入到新的列表中,再通过遍历,赋值字典,使用append方法依次添加到列表,这样就是一个按照value值排续.于是有了下面的代码:li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}]def fun(li):li_1 = [] # 接收value值li_2 = [] # 接收新的字典dict_1 = {}for i in range(len(li)):li_1.append(li[i]["key"])li_1.sort() # 排序for i in li_1:dict_1["key"] = iprint(dict_1)li_2.append(dict_1)return li_2print(fun(li))但是运行的结果却是:[{'key': 9}, {'key': 9}, {'key': 9}, {'key': 9}]很明显,取值被最后一个传入value的9全部替换了.为什么会这样呢?开始怀疑是不是和字典中重复赋值给"key"有关,但是也不应该啊,每次遍历的时候就是已经把字典append到list中去了啊!于是使用print(id(dict_1)),查看内存信息,发现这个现象:2874566784272287456678427228745667842722874566784272居然都是同一地址!!再查看list中的每个元素地址:for i in li_2:print(id(i))结果:(print(id(dict_1))也打印了)25017473569442501747356944250174735694425017473569442501747356944250174735694425017473569442501747356944于是明白了,因为每次添加的都是同一个内存到list中去了,dict_1每次写入的时候改变了内存中的value,但是地址不变,即是,创建了一次内存空间,只会不断的改变value了.完善方法:每次遍历时候创建一个新的dict_1.代码:def fun(li):li_1 = []li_2 = []for i in range(len(li)):li_1.append(li[i]["key"])li_1.sort() # 排序for i in li_1:dict_1 = {} # 每次遍历时创建一个新的内存dict_1["key"] = ili_2.append(dict_1)return li_2print(fun(li))总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
实际开发中,经常需要对 Python 列表进行更新,包括向列表中添加元素、修改表中元素以及删除元素。本节先来学习如何向列表中添加元素。使用+运算符可以将多个序列连接起来;列表是序列的一种,所以也可以使用+进行连接,这样就相当于在第一个列表的末尾添加了另一个列表。请看下面的演示:language =["Python","C++","Java"]
birthday =[1991,1998,1995]
info = language + birthday
print("language =", language)
print("birthday =", birthday)
print("info =", info)运行结果:
language = ['Python', 'C++', 'Java']
birthday = [1991, 1998, 1995]
info = ['Python', 'C++', 'Java', 1991, 1998, 1995]
从运行结果可以发现,使用+会生成一个新的列表,原有的列表不会被改变。+更多的是用来拼接列表,而且执行效率并不高,如果想在列表中插入元素,应该使用下面几个专门的方法。Python append()方法添加元素append() 方法用于在列表的末尾追加元素,该方法的语法格式如下:
listname.append(obj)
其中,listname 表示要添加元素的列表;obj 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等。请看下面的演示:l =['Python','C++','Java']
#追加元素
l.append('PHP')
print(l)
#追加元组,整个元组被当成一个元素
t =('JavaScript','C#','Go')
l.append(t)
print(l)
#追加列表,整个列表也被当成一个元素
l.append(['Ruby','SQL'])
print(l)运行结果为:
['Python', 'C++', 'Java', 'PHP']
['Python', 'C++', 'Java', 'PHP', ('JavaScript', 'C#', 'Go')]
['Python', 'C++', 'Java', 'PHP', ('JavaScript', 'C#', 'Go'), ['Ruby', 'SQL']]
可以看到,当给 append() 方法传递列表或者元组时,此方法会将它们视为一个整体,作为一个元素添加到列表中,从而形成包含列表和元组的新列表。Python extend()方法添加元素extend() 和 append() 的不同之处在于:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。extend() 方法的语法格式如下:
listname.extend(obj)
其中,listname 指的是要添加元素的列表;obj 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等,但不能是单个的数字。请看下面的演示:l =['Python','C++','Java']
#追加元素
l.extend('C')
print(l)
#追加元组,元祖被拆分成多个元素
t =('JavaScript','C#','Go')
l.extend(t)
print(l)
#追加列表,列表也被拆分成多个元素
l.extend(['Ruby','SQL'])
print(l)运行结果:
['Python', 'C++', 'Java', 'C']
['Python', 'C++', 'Java', 'C', 'JavaScript', 'C#', 'Go']
['Python', 'C++', 'Java', 'C', 'JavaScript', 'C#', 'Go', 'Ruby', 'SQL']
Python insert()方法插入元素append() 和 extend() 方法只能在列表末尾插入元素,如果希望在列表中间某个位置插入元素,那么可以使用 insert() 方法。insert() 的语法格式如下:
listname.insert(index , obj)
其中,index 表示指定位置的索引值。insert() 会将 obj 插入到 listname 列表第 index 个元素的位置。当插入列表或者元祖时,insert() 也会将它们视为一个整体,作为一个元素插入到列表中,这一点和 append() 是一样的。请看下面的演示代码:l =['Python','C++','Java']
#插入元素
l.insert(1,'C')
print(l)
#插入元组,整个元祖被当成一个元素
t =('C#','Go')
l.insert(2, t)
print(l)
#插入列表,整个列表被当成一个元素
l.insert(3,['Ruby','SQL'])
print(l)
#插入字符串,整个字符串被当成一个元素
l.insert(0,"https://www.csdn.net/")
print(l)输出结果为:
['Python', 'C', 'C++', 'Java']
['Python', 'C', ('C#', 'Go'), 'C++', 'Java']
['Python', 'C', ('C#', 'Go'), ['Ruby', 'SQL'], 'C++', 'Java']
['
https://www.csdn.net/
', 'Python', 'C', ('C#', 'Go'), ['Ruby', 'SQL'], 'C++', 'Java']
提示,insert() 主要用来在列表的中间位置插入元素,如果你仅仅希望在列表的末尾追加元素,那我更建议使用 append() 和 extend()。
实际开发中,经常需要对 Python 列表进行更新,包括向列表中添加元素、修改表中元素以及删除元素。本节先来学习如何向列表中添加元素。《Python序列》一节告诉我们,使用+运算符可以将多个序列连接起来;列表是序列的一种,所以也可以使用+进行连接,这样就相当于在第一个列表的末尾添加了另一个列表。请看下面的演示:language = ["Python", "C++", "Java"]
birthday = [1991, 1998, 1995]
info = language + birthday
print("language =", language)
print("birthday =", birthday)
print("info =", info)
运行结果:
language = [‘Python’, ‘C++’, ‘Java’]birthday = [1991, 1998, 1995]info = [‘Python’, ‘C++’, ‘Java’, 1991, 1998, 1995]
从运行结果可以发现,使用+会生成一个新的列表,原有的列表不会被改变。+更多的是用来拼接列表,而且执行效率并不高,如果想在列表中插入元素,应该使用下面几个专门的方法。Python append()方法添加元素append() 方法用于在列表的末尾追加元素,该方法的语法格式如下:
listname.append(obj)
其中,listname 表示要添加元素的列表;obj 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等。请看下面的演示:l = ['Python', 'C++', 'Java']
#追加元素
l.append('PHP')
print(l)
#追加元组,整个元组被当成一个元素
t = ('JavaScript', 'C#', 'Go')
l.append(t)
print(l)
#追加列表,整个列表也被当成一个元素
l.append(['Ruby', 'SQL'])
print(l)
运行结果为:
[‘Python’, ‘C++’, ‘Java’, ‘PHP’][‘Python’, ‘C++’, ‘Java’, ‘PHP’, (‘JavaScript’, ‘C#’, ‘Go’)][‘Python’, ‘C++’, ‘Java’, ‘PHP’, (‘JavaScript’, ‘C#’, ‘Go’), [‘Ruby’, ‘SQL’]]
可以看到,当给 append() 方法传递列表或者元组时,此方法会将它们视为一个整体,作为一个元素添加到列表中,从而形成包含列表和元组的新列表。Python extend()方法添加元素extend() 和 append() 的不同之处在于:extend() 不会把列表或者元祖视为一个整体,而是把它们包含的元素逐个添加到列表中。extend() 方法的语法格式如下:listname.extend(obj)
其中,listname 指的是要添加元素的列表;obj 表示到添加到列表末尾的数据,它可以是单个元素,也可以是列表、元组等,但不能是单个的数字。请看下面的演示:l = ['Python', 'C++', 'Java']
#追加元素
l.extend('C')
print(l)
#追加元组,元祖被拆分成多个元素
t = ('JavaScript', 'C#', 'Go')
l.extend(t)
print(l)
#追加列表,列表也被拆分成多个元素
l.extend(['Ruby', 'SQL'])
print(l)
运行结果:
[‘Python’, ‘C++’, ‘Java’, ‘C’][‘Python’, ‘C++’, ‘Java’, ‘C’, ‘JavaScript’, ‘C#’, ‘Go’][‘Python’, ‘C++’, ‘Java’, ‘C’, ‘JavaScript’, ‘C#’, ‘Go’, ‘Ruby’, ‘SQL’]
Python insert()方法插入元素append() 和 extend() 方法只能在列表末尾插入元素,如果希望在列表中间某个位置插入元素,那么可以使用 insert() 方法。insert() 的语法格式如下:listname.insert(index , obj)
其中,index 表示指定位置的索引值。insert() 会将 obj 插入到 listname 列表第 index 个元素的位置。当插入列表或者元祖时,insert() 也会将它们视为一个整体,作为一个元素插入到列表中,这一点和 append() 是一样的。请看下面的演示代码:l = ['Python', 'C++', 'Java']
#插入元素
l.insert(1, 'C')
print(l)
#插入元组,整个元祖被当成一个元素
t = ('C#', 'Go')
l.insert(2, t)
print(l)
#插入列表,整个列表被当成一个元素
l.insert(3, ['Ruby', 'SQL'])
print(l)
#插入字符串,整个字符串被当成一个元素
l.insert(0, "http://c.biancheng.net")
print(l)
输出结果为:
[‘Python’, ‘C’, ‘C++’, ‘Java’][‘Python’, ‘C’, (‘C#’, ‘Go’), ‘C++’, ‘Java’][‘Python’, ‘C’, (‘C#’, ‘Go’), [‘Ruby’, ‘SQL’], ‘C++’, ‘Java’][‘http://c.biancheng.net’, ‘Python’, ‘C’, (‘C#’, ‘Go’), [‘Ruby’, ‘SQL’], ‘C++’, ‘Java’]
提示,insert() 主要用来在列表的中间位置插入元素,如果你仅仅希望在列表的末尾追加元素,那我更建议使用 append() 和 extend()。

我要回帖

更多关于 python提取字典嵌套列表的值 的文章

 

随机推荐