python常见基本知识点FAQ
1.如何取得字典中的键和值?
t = {'year':'2018','month':'12','day':'4','hour':'21','minute':'52','second':'20'}
print(t.keys())
print(t.values())
print(t.items())
dict_keys(['year', 'month', 'day', 'hour', 'minute', 'second'])
dict_values(['2018', '12', '4', '21', '52', '20'])
dict_items([('year', '2018'), ('month', '12'), ('day', '4'), ('hour', '21'), ('minute', '52'), ('second', '20')])
2.字典是可迭代的吗?
for i in t:
print(i)
print("-"*100)
for i in t.keys():
print(i)
print("-"*100)
for i in t.values():
print(i)
print("-"*100)
for i in t.items():
print(i)
year
month
day
hour
minute
second
----------------------------------------------------------------------------------------------------
year
month
day
hour
minute
second
----------------------------------------------------------------------------------------------------
2018
12
4
21
52
20
----------------------------------------------------------------------------------------------------
('year', '2018')
('month', '12')
('day', '4')
('hour', '21')
('minute', '52')
('second', '20')
结论:字典本身是不像列表或者元组那样可迭代的,如果需要在循环中对字典进行迭代,那就只能对字典的“keys”或者“values”或者“items”进行迭代,然后进一步处理。如果不指定迭代的对象是什么,那么python默认认为是对key进行迭代。
3.sorted()方法和list.sort()方法有什么区别?
list = ["hello","hey","hi","allow","consent","approve"]
print(list)
print("-"*100)
list_sorted = sorted(list)
print(list_sorted)
print("-"*100)
print(list)
list_sort = list.sort()
print(list)
print(list_sort())
['hello', 'hey', 'hi', 'allow', 'consent', 'approve']
----------------------------------------------------------------------------------------------------
['allow', 'approve', 'consent', 'hello', 'hey', 'hi']
----------------------------------------------------------------------------------------------------
['hello', 'hey', 'hi', 'allow', 'consent', 'approve']
['allow', 'approve', 'consent', 'hello', 'hey', 'hi']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-26-b80c1a015c3a> in <module>()
8 list_sort = list.sort()
9 print(list)
---> 10 print(list_sort())
TypeError: 'NoneType' object is not callable
结论:综上,可以清楚看到:1.sorted()函数是python内置函数,可以对可迭代对象进行排序,结果默认为按照ascii码字符升序,并且返回的结果是一个排序后的新的对象,原对象不受影响。2.list.sort()函数也可以对可迭代对象进行排序,结果也默认为按照ascii码字符升序,不同之处在于,这个方法不返回新的对象,或者说,返回的对象是None值,这就是说,sort()方法排序是在对象本身上进行的。
3.可以对字典进行sort()和sorted()排序吗?
t.sort()
print(t)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-27-a47e8336678a> in <module>()
----> 1 t.sort()
2 print(t)
AttributeError: 'dict' object has no attribute 'sort'
t.values().sort()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-28-cf021cbb199e> in <module>()
----> 1 t.values().sort()
AttributeError: 'dict_values' object has no attribute 'sort'
t.items().sort()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-29-2d1751765371> in <module>()
----> 1 t.items().sort()
AttributeError: 'dict_items' object has no attribute 'sort'
t.keys().sort()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-30-03efe3817c04> in <module>()
----> 1 t.keys().sort()
AttributeError: 'dict_keys' object has no attribute 'sort'
结论1:可见,不但字典本身不可用sort()方法进行排序,而且,使用了keys()方法,values()方法和items()方法之后的对象也不可以使用sort()方法。(按:由于元组是不可变对象,因此,元组也是不存在sort()方法的)
t_sorted = sorted(t)
print(t_sorted)
print(t)
['day', 'hour', 'minute', 'month', 'second', 'year']
{'year': '2018', 'month': '12', 'day': '4', 'hour': '21', 'minute': '52', 'second': '20'}
t_sorted = sorted(t.keys())
print(t_sorted)
['day', 'hour', 'minute', 'month', 'second', 'year']
t_sorted = sorted(t.values())
print(t_sorted)
['12', '20', '2018', '21', '4', '52']
t_sorted = sorted(t.items())
print(t_sorted)
print(t)
[('day', '4'), ('hour', '21'), ('minute', '52'), ('month', '12'), ('second', '20'), ('year', '2018')]
{'year': '2018', 'month': '12', 'day': '4', 'hour': '21', 'minute': '52', 'second': '20'}
t_sorted = sorted(t.items(),key = lambda x:x[1],reverse = True)
print(t_sorted)
print(t)
[('minute', '52'), ('day', '4'), ('hour', '21'), ('year', '2018'), ('second', '20'), ('month', '12')]
{'year': '2018', 'month': '12', 'day': '4', 'hour': '21', 'minute': '52', 'second': '20'}
t_new = dict(t_sorted)
print(t_new)
print(t)
{'minute': '52', 'day': '4', 'hour': '21', 'year': '2018', 'second': '20', 'month': '12'}
{'year': '2018', 'month': '12', 'day': '4', 'hour': '21', 'minute': '52', 'second': '20'}
结论2:1.sorted可以对可迭代对象进行迭代(由于这个函数返回的是新的对象,因此,也可以用来对元组和字符串等不可变对象进行排序,返回的结果是列表类型),由于keys(),values()和items()方法在对字典进行使用后返回的结果都是课迭代的,所以,这些对象都是可以用sorted()方法进行排序的。2.用t.keys()和t.values()方法进行sorted()排序仅仅实现了对其返回结果的排序,并不能实现对字典的排序,因此需要用t.items()方法进行sorted()排序。3.sorted(t.items())默认是对字典的键进行升序排序,如果要实现对字典按照值降序排序,需要指定key参数和reverse参数。其中,key参数接收的是“排序中进行比较的元素”