Category: Python

  • python dict sort

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行:

    1 下面的是按照value的值从大到小的顺序来排序。

    dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
    dict= sorted(dic.iteritems(), key=lambda d:d[1], reverse = True)
    print dict

    输出的结果:

    [('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]

    下面我们分解下代码
    print dic.iteritems() 得到[(键,值)]的列表。
    然后用sorted方法,通过key这个参数,指定排序是按照value,也就是第一个元素d[1的值来排序。reverse = True表示是需要翻转的,默认是从小到大,翻转的话,那就是从大到小。

    2 对字典按键(key)排序:

    dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}

    dict= sorted(dic.iteritems(), key=lambda d:d[0]) d[0]表示字典的键
    print dict

    http://www.cnpythoner.com/post/266.html

  • python sleep

    在调试代码的时候要分析 block

    可以用 sleep 使程序 block 一段时间

    #!/usr/bin/python
    import time
    
    print "Start : %s" % time.ctime()
    time.sleep( 5 )
    print "End : %s" % time.ctime()
    
  • python获取昨天日期时间戳

    snippet

    import datetime
    yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
    yesterday_formatted = yesterday.strftime("%Y-%m-%d")

    python 生成时间戳

    import time
    now = int(time.time())
  • python ip地址排序

    方法一:

    ip_list = ['192.168.1.100', '192.168.10.3', '192.168.8.1']
    ip_list.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0') for i in x.split('.')] ), ''.join( [ i.rjust(3, '0') for i in y.split('.')] ) ) )
    

    结果

    ['192.168.1.100', '192.168.8.1', '192.168.10.3']

    方法二:

    转换成 int 型,用 int 来比较

    import struct
    import socket
    
    def ip2int(addr):
        return struct.unpack("!I", socket.inet_aton(addr))[0]
    
    def int2ip(addr):
        return socket.inet_ntoa(struct.pack("!I", addr))
    
    ip_list = ['192.168.1.100', '192.168.10.3', '192.168.8.1']
    # 构建 int_ip:ip 形式的 key:value, 并对 key 排序
    
    ip_unsorted_dict = {}
    for ip in ip_list:
        int_ip = ip2int(ip)
        ip_unsorted_dict[int_ip] = ip
    
    keys = ip_unsorted_dict.keys()
    keys.sort()
    ip_sorted_list=[]
    for key in keys:
        ip_sorted_list.append(ip_unsorted_dict[key])
    
    print ip_sorted_list

    结果:

    ['192.168.1.100', '192.168.8.1', '192.168.10.3']

    参考:
    http://blog.csdn.net/hong201/article/details/3119519

  • python raw_input用map转换为 list

    raw_input是用来提示输入的

    把输入的字符以转化为list

    >>> input_words = raw_input(‘input some words: ‘)

    input some words: shang hai zi lai shui lai zi hai shang.

    >>> input_words

    ‘shang hai zi lai shui lai zi hai shang.’

    使用 map 将数据转换为 list

    >>> input_list = map(str, input_words.split())
    >>> input_list
    [‘shang’, ‘hai’, ‘zi’, ‘lai’, ‘shui’, ‘lai’, ‘zi’, ‘hai’, ‘shang.’]

  • python发送post, put请求

    发送post,没什么可说的

    import urllib
    import urllib2
    
    url = 'http://example.com/...'
    values = { 'productslug': 'bar','qty': 'bar' }
    data = urllib.urlencode(values)
    req = urllib2.Request(url, data)
    response = urllib2.urlopen(req)
    result = response.read()
    print result
    

    发送 json 格式 post,不需要 urllib 进行 urlencode,但是需要 json.dumps(),同时需要发送头信息包含content-type

    import urllib2
    import json
    
    url = 'http://example.com/...'
    values = {"q":{"has_problems": "yes"}}
    data = json.dumps(values)
    req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
    response = urllib2.urlopen(req)
    result = response.read()
    print result
    

    发送 json 格式 put 请求,只多加一行

    import urllib2
    import json
    
    url = 'http://example.com/...'
    values = {"q":{"has_problems": "yes"}}
    data = json.dumps(values)
    req = urllib2.Request(url, data, {'Content-Type': 'application/json'})
    req.get_method = lambda:"PUT"
    response = urllib2.urlopen(req)
    result = response.read()
    print result
    

    使用 httplib 发送 PUT 请求

    update_data为 dict 类型
    def postUpdate(update_data):
        path = "/api/posts/" + str(update_data['post_id'])
        params = json.dumps(update_data)
        conn = httplib.HTTPConnection("mypost.jpuyy.com", 80)                                                                                                                 
        conn.set_debuglevel(1)
        conn.request("PUT", path, params, headers)
        response = conn.getresponse()
        result = response.read()
        return result