prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75
}
# Make a dictionary of all prices over 200
p1 = {key: value for key, value in prices.items() if value > 200}

四、删除种类一样成分并保持顺序

from collections import defaultdict

d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)

>>> d
defaultdict(<type 'list'>, {'a': [1, 2], b: [4]})
>>> mylist = [1, 4, -5, 10, -7, 2, 3, -1]
>>> [n * n for n in mylist if n > 0]
[1, 16, 100, 4, 9]
>>> [n if n > 0 else 0 for n in mylist]
[1, 4, 0, 10, 0, 2, 3, 0]
from collections import OrderedDict

d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# Outputs "foo 1", "bar 2", "spam 3", "grok 4"

>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'

  能够选用collections中的defaultdict来促成,defalultdict接受list或许set为参数

 

  groupby() 函数扫描整个系列并且查找三番五次一样值(大概依照钦点key函数重回值一样)的成分系列。
在历次迭代的时候,它会重临一个值和1个迭代器对象,
那一个迭代器对象足以生成成分值全体对等下边10分值的组中所有目标。

def dedupe(items):
    seen = set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)

  如在python3中

  注意,groupby() 仅仅检查一而再的因素,所以类别必须先排序。

  即便想协会分组并允许专擅走访,能够思念选拔defaultdict()。

  itertools.groupby() 函数对于如此的多少分组操作分外实用。

rows = [
    {'address': '5412 N CLARK', 'date': '07/01/2012'},
    {'address': '5148 N CLARK', 'date': '07/04/2012'},
    {'address': '5800 E 58TH', 'date': '07/02/2012'},
    {'address': '2122 N CLARK', 'date': '07/03/2012'},
    {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
    {'address': '1060 W ADDISON', 'date': '07/02/2012'},
    {'address': '4801 N BROADWAY', 'date': '07/01/2012'},
    {'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
]

from operator import itemgetter
from itertools import groupby

# Sort by the desired field first
rows.sort(key=itemgetter('date')) # 等同于rows.sort(key=lambda item:item.get('date')) 
# Iterate in groups
for date, items in groupby(rows, key=itemgetter('date')):
    print date
    for i in items:
        print i
# Find keys in common
a.keys() & b.keys() # { 'x', 'y' }
# Find keys in a that are not in b
a.keys() - b.keys() # { 'z' }
# Find (key,value) pairs in common
a.items() & b.items() # { ('y', 2) }

  能够动用循环和二个字典进行计算,也得以一直利用collections.Counter 类来成功。Counter底层也是用字典来实现的。

def dedupe(items, key=None):
    seen = set()
    for item in items:
        val = item if not key else key(item)
        if val not in item:
            yield item
            seen.add(val)

>>> a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]
>>> dedupe(a, key=lambda d: (d['x'],d['y']))

#同样可以过来文件中重复行
with open(somefile,'r') as f:
for line in dedupe(f):
    ...

  借使种类上的值都以 hashable 类型,能够用上面包车型客车点子来促成:

  collections.namedtuple()提供了足以经过名称访问元组兰秋素的措施,能够使代码易于阅读。

三、字典的运算

六、通过字段将记录分组

  平常使用列表推导式可能生成器表明式,能够过滤大概缩水种类,同时过滤的同时能够转移成分。

五、类别中冒出次数最多的成分

一、字典中三个键映射多少个值

 

>>> from collections import namedtuple
>>> Subscriber = namedtuple('Subscriber', ['addr', 'joined'])
>>> sub = Subscriber('jonesy@example.com', '2012-10-19')
>>> sub
Subscriber(addr='jonesy@example.com', joined='2012-10-19')
>>> sub.addr
'jonesy@example.com'
>>> sub.joined
'2012-10-19'

  对于复杂的过滤,能够设想filter函数,接受多个过滤函数功效域体系每一种元素,仅再次回到体系中结果为True的值。

 

九、命名元组

7、过滤系列元素

words = [
    'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
    'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
    'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
    'my', 'eyes', "you're", 'under'
]
from collections import Counter
word_counts = Counter(words)
# 出现频率最高的3个单词
top_three = word_counts.most_common(3)
>>>word_counts 
Counter({'eyes': 8, 'the': 5, 'look': 4, 'into': 3, 'my': 3, 'around': 2, "you're": 1, "don't": 1, 'under': 1, 'not': 1})

morewords = ['why','are','you','not','looking','in','my','eyes']
#更新
word_counts.update(morewords)
#运算
a = Counter(words)
b = Counter(morewords)
a+b
a-b

  使用 collections 模块中的 OrderedDict 类,会维持元素的插入顺序。能够操纵json编码后的程序

二、字典排序

捌、从字典中领取子集

 

  假使体系的要素不是hashable的,则不能够一贯放进set中,我们得以通过传播三个改变来hashable的诀要来管理种类中的成分。上边的实例改成上边包车型地铁模范:

values = ['1', '2', '-3', '-', '4', 'N/A', '5']
def is_int(val):
    try:
        x = int(val)
        return True
    except ValueError:
        return False
ivals = list(filter(is_int, values))
print(ivals)
# Outputs ['1', '2', '-3', '4', '5']

  使用字典推导式能够长足落成须要

  d = {‘a’:一},d.keys()、d.values(), d.items()在python
第22中学回到的是列表。在python三中,d.items()在回去的是2个个含有(键,值)对的因素视图对象,支持集结操作,d.keys()再次回到2个人作品突显键会集的键视图对象,一样支撑集结操作,d.values()重临值得视图对象,但是不匡助集结操作。

  注意,一个 OrderedDict 的高低是多少个平淡无奇字典的两倍,因为它个中维护着此外三个链表。

相关文章

网站地图xml地图