Python论坛  - 讨论区

标题:Re: [python-chinese]另外的字典排序问题

2004年09月07日 星期二 16:09

jagucpu jagucpu at 126.com
Tue Sep 7 16:09:55 HKT 2004

还真有挑战性,初学python,有错误请指出:

>>> a={'a':3,'b':5,'c':1,'d':4}
>>> a
{'a': 3, 'c': 1, 'b': 5, 'd': 4}
>>> b=[x for x in a]
>>> b
['a', 'c', 'b', 'd']
>>> c=[y for x,y in a.iteritems()]
>>> c
[3, 1, 5, 4]
>>> d=dict(zip(c,b))
>>> d
{1: 'c', 3: 'a', 4: 'd', 5: 'b'}

好像是达到要求了吧?


> 现在已经有一个字典,Keys是英文单词,Values是这个单词在文件中出现的次数。
> 想要给这个字典重新排序,让出现次数最多的单词排第一位,出现次数最少的排最后。
> 
> 我尝试把字典里的values放入一个list里,在对list排序,但是好像排完也没有什么意义。很多单词的values值一样,就是排完也没有办法把把排序结果应用回原来的字典里。
> 
> 我能想当的另一个方案是,每个单词和后面的所有词比较,当遇到values比他大的,就改为values更大的单词开始比较,如果到最后都没有比他大的,就把这个词写入新字典里,同时在旧字典里删除自己,但是好像太弱智了点。
> 
> 
> 不知道还有什么其他更好地解决方案。
> 
> 谢谢~~~
> 
> 基础太差,时间又太紧,我问题好多,学得好辛苦 。 :(
> 
> 
> 

-----------------------------------------------------------
马上到http://www.126.com申请260M全国最大免费邮箱!
提供新邮件到达手机短信提醒功能, 随时掌握邮件信息!

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 16:11

sun.haitao at zte.com.cn sun.haitao at zte.com.cn
Tue Sep 7 16:11:33 HKT 2004

请问,pcap包是哪儿得到的?谢谢!

Best Regards
Sun Haitao                   |



----- 转发人 孙海涛123203/user/zte_ltd 时间 2004-09-07 16:14 -----
                                                                                                                                                   
                      梅劲松                                                                                                                       
                      <stephen.cn at gmail.com>             收件人:  python-chinese at lists.python.cn                                                  
                                                         抄送:                                                                                    
                                                         密送:                                                                                    
                      发件人:                           主题:    Re: [python-chinese] 请问在python下如何构建一个I CMP类似的IP包然后发出去?      
                      python-chinese-bounces at list                                                                                                  
                      s.python.cn                                                                                                                  
                                                                                                                                                   
                                                                                                                                                   
                      2004-09-07 16:01                                                                                                             
                      请答复 给 梅劲松; 请答复 给                                                                                                  
                      python-chinese                                                                                                               
                                                                                                                                                   
                                                                                                                                                   




这个例子你看一下。
怎么没人回答我的问题呢?郁闷。

#!/usr/bin/env python2

import pcap
import sys
import string
import time
import socket
import struct

protocols={socket.IPPROTO_TCP:'tcp',
           socket.IPPROTO_UDP:'udp',
           socket.IPPROTO_ICMP:'icmp'}

def decode_ip_packet(s):
  d={}
  d['version']=(ord(s[0]) & 0xf0) >> 4
  d['header_len']=ord(s[0]) & 0x0f
  d['tos']=ord(s[1])
  d['total_len']=socket.ntohs(struct.unpack('H',s[2:4])[0])
  d['id']=socket.ntohs(struct.unpack('H',s[4:6])[0])
  d['flags']=(ord(s[6]) & 0xe0) >> 5
  d['fragment_offset']=socket.ntohs(struct.unpack('H',s[6:8])[0] & 0x1f)
  d['ttl']=ord(s[8])
  d['protocol']=ord(s[9])
  d['checksum']=socket.ntohs(struct.unpack('H',s[10:12])[0])
  d['source_address']=pcap.ntoa(struct.unpack('i',s[12:16])[0])
  d['destination_address']=pcap.ntoa(struct.unpack('i',s[16:20])[0])
  if d['header_len']>5:
    d['options']=s[20:4*(d['header_len']-5)]
  else:
    d['options']=None
  d['data']=s[4*d['header_len']:]
  return d


def dumphex(s):
  bytes = map(lambda x: '%.2x' % x, map(ord, s))
  for i in xrange(0,len(bytes)/16):
    print '    %s' % string.join(bytes[i*16:(i+1)*16],' ')
  print '    %s' % string.join(bytes[(i+1)*16:],' ')


def print_packet(pktlen, data, timestamp):
  if not data:
    return

  if data[12:14]=='\x08\x00':
    decoded=decode_ip_packet(data[14:])
    print '\n%s.%f %s > %s' % (time.strftime('%H:%M',
                                           time.localtime(timestamp)),
                             timestamp % 60,
                             decoded['source_address'],
                             decoded['destination_address'])
    for key in ['version', 'header_len', 'tos', 'total_len', 'id',
                'flags', 'fragment_offset', 'ttl']:
      print '  %s: %d' % (key, decoded[key])
    print '  protocol: %s' % protocols[decoded['protocol']]
    print '  header checksum: %d' % decoded['checksum']
    print '  data:'
    dumphex(decoded['data'])


if __name__=='__main__':

  if len(sys.argv) < 3:
    print 'usage: sniff.py  '
    sys.exit(0)
  p = pcap.pcapObject()

  dev = sys.argv[1]
  net, mask = pcap.lookupnet(dev)
  # note:  to_ms does nothing on linux
  p.open_live(dev, 1600, 0, 100)

  p.setfilter(string.join(sys.argv[2:],' '), 0, 0)


  try:
    while 1:
      p.dispatch(1, print_packet)


  except KeyboardInterrupt:
    print '%s' % sys.exc_type
    print 'shutting down'
    print '%d packets received, %d packets dropped, %d packets dropped
by interface' % p.stats()



----- Original Message -----
From: River <river at exoweb.net>
Date: Tue, 7 Sep 2004 15:34:22 +0800
Subject: [python-chinese] 请问在python下如何构建一个I CMP类似的IP包然后发出
去?
To: python-chinese at lists.python.cn


C下很容易实现,但在python下能否进行呢,
虽然这不是python的擅长。
能否举个简单例子,谢谢。

_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese
_______________________________________________
python-chinese list
python-chinese at lists.python.cn
http://python.cn/mailman/listinfo/python-chinese



*******************************************
±¾Ԋ¼��ʼ�¬ɧ·¢Ж,»��ª·¢ׁ£ºhelpdesk at zte.com.cn
********************************************


(Embedded image moved to file: pic24596.pcx)



*******************************************
±¾ÓʼþÒѾ­¹ýÀ¬»øÓʼþ¹ýÂË£¬Èç·¢ÏÖÀ¬»ø
Óʼþ£¬Çëת·¢ÖÁ£ºhelpdesk at zte.com.cn
********************************************
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pic24596.pcx
Type: application/octet-stream
Size: 907 bytes
Desc: not available
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20040907/ce92c48f/pic24596.obj

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 16:23

limodou limodou at gmail.com
Tue Sep 7 16:23:11 HKT 2004

还是个字典呀。但字典是无序的。这样看上去好象可以,其实不行。


On Tue, 7 Sep 2004 16:09:55 +0800 (CST), jagucpu <jagucpu at 126.com> wrote:
> 还真有挑战性,初学python,有错误请指出:
> 
> >>> a={'a':3,'b':5,'c':1,'d':4}
> >>> a
> {'a': 3, 'c': 1, 'b': 5, 'd': 4}
> >>> b=[x for x in a]
> >>> b
> ['a', 'c', 'b', 'd']
> >>> c=[y for x,y in a.iteritems()]
> >>> c
> [3, 1, 5, 4]
> >>> d=dict(zip(c,b))
> >>> d
> {1: 'c', 3: 'a', 4: 'd', 5: 'b'}
> 
> 好像是达到要求了吧?
> 
> 
> > 现在已经有一个字典,Keys是英文单词,Values是这个单词在文件中出现的次数。
> > 想要给这个字典重新排序,让出现次数最多的单词排第一位,出现次数最少的排最后。
> >
> > 我尝试把字典里的values放入一个list里,在对list排序,但是好像排完也没有什么意义。很多单词的values值一样,就是排完也没有办法把把排序结果应用回原来的字典里。
> >
> > 我能想当的另一个方案是,每个单词和后面的所有词比较,当遇到values比他大的,就改为values更大的单词开始比较,如果到最后都没有比他大的,就把这个词写入新字典里,同时在旧字典里删除自己,但是好像太弱智了点。
> >
> >
> > 不知道还有什么其他更好地解决方案。
> >
> > 谢谢~~~
> >
> > 基础太差,时间又太紧,我问题好多,学得好辛苦 。 :(
> >
> >
> >
> 
> -----------------------------------------------------------
> 马上到http://www.126.com申请260M全国最大免费邮箱!
> 提供新邮件到达手机短信提醒功能, 随时掌握邮件信息!
> 
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 



-- 
I like python!

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 16:50

March Liu March.Liu at gmail.com
Tue Sep 7 16:50:18 HKT 2004

如我在前面所说,按照数据结构理论,字典本来就不应该在外界排序,因为手工排序可能会影响字典的工作效率,而大部分的字典,包括Python的,也确实按照这个思路实现的——我们不能对它的内部存储顺序进行直接有效的干涉,这不是技术达不到,是约定不允许。

On Tue, 7 Sep 2004 16:23:11 +0800, limodou <limodou at gmail.com> wrote:
> 还是个字典呀。但字典是无序的。这样看上去好象可以,其实不行。
> 
> 
> 
> 
> On Tue, 7 Sep 2004 16:09:55 +0800 (CST), jagucpu <jagucpu at 126.com> wrote:
> > 还真有挑战性,初学python,有错误请指出:
> >
> > >>> a={'a':3,'b':5,'c':1,'d':4}
> > >>> a
> > {'a': 3, 'c': 1, 'b': 5, 'd': 4}
> > >>> b=[x for x in a]
> > >>> b
> > ['a', 'c', 'b', 'd']
> > >>> c=[y for x,y in a.iteritems()]
> > >>> c
> > [3, 1, 5, 4]
> > >>> d=dict(zip(c,b))
> > >>> d
> > {1: 'c', 3: 'a', 4: 'd', 5: 'b'}
> >
> > 好像是达到要求了吧?
> >
> >
> > > 现在已经有一个字典,Keys是英文单词,Values是这个单词在文件中出现的次数。
> > > 想要给这个字典重新排序,让出现次数最多的单词排第一位,出现次数最少的排最后。
> > >
> > > 我尝试把字典里的values放入一个list里,在对list排序,但是好像排完也没有什么意义。很多单词的values值一样,就是排完也没有办法把把排序结果应用回原来的字典里。
> > >
> > > 我能想当的另一个方案是,每个单词和后面的所有词比较,当遇到values比他大的,就改为values更大的单词开始比较,如果到最后都没有比他大的,就把这个词写入新字典里,同时在旧字典里删除自己,但是好像太弱智了点。
> > >
> > >
> > > 不知道还有什么其他更好地解决方案。
> > >
> > > 谢谢~~~
> > >
> > > 基础太差,时间又太紧,我问题好多,学得好辛苦 。 :(
> > >
> > >
> > >
> >
> > -----------------------------------------------------------
> > 马上到http://www.126.com申请260M全国最大免费邮箱!
> > 提供新邮件到达手机短信提醒功能, 随时掌握邮件信息!
> >
> > 
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
> 
> 
> --
> I like python!
> 
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 



-- 
刘鑫
March.Liu

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年09月07日 星期二 21:22

梅劲松  stephen.cn at gmail.com
Tue Sep 7 21:22:48 HKT 2004

http://sourceforge.net/project/showfiles.php?group_id=14007&package;_id=13826


On Tue, 7 Sep 2004 16:11:33 +0800, sun.haitao at zte.com.cn
<sun.haitao at zte.com.cn> wrote:
> 请问,pcap包是哪儿得到的?谢谢!
> 
> Best Regards
> Sun Haitao                   |
> 
> ----- 转发人 孙海涛123203/user/zte_ltd 时间 2004-09-07 16:14 -----
> 
>                      梅劲松
>                      <stephen.cn at gmail.com>             收件人:  python-chinese at lists.python.cn
>                                                         抄送:
>                                                         密送:
>                      发件人:                           主题:    Re: [python-chinese] 请问在python下如何构建一个I CMP类似的IP包然后发出去?
>                      python-chinese-bounces at list
>                      s.python.cn
> 
>                      2004-09-07 16:01
>                      请答复 给 梅劲松; 请答复 给
>                      python-chinese
> 
> 这个例子你看一下。
> 怎么没人回答我的问题呢?郁闷。
> 
> #!/usr/bin/env python2
> 
> import pcap
> import sys
> import string
> import time
> import socket
> import struct
> 
> protocols={socket.IPPROTO_TCP:'tcp',
>           socket.IPPROTO_UDP:'udp',
>           socket.IPPROTO_ICMP:'icmp'}
> 
> def decode_ip_packet(s):
>  d={}
>  d['version']=(ord(s[0]) & 0xf0) >> 4
>  d['header_len']=ord(s[0]) & 0x0f
>  d['tos']=ord(s[1])
>  d['total_len']=socket.ntohs(struct.unpack('H',s[2:4])[0])
>  d['id']=socket.ntohs(struct.unpack('H',s[4:6])[0])
>  d['flags']=(ord(s[6]) & 0xe0) >> 5
>  d['fragment_offset']=socket.ntohs(struct.unpack('H',s[6:8])[0] & 0x1f)
>  d['ttl']=ord(s[8])
>  d['protocol']=ord(s[9])
>  d['checksum']=socket.ntohs(struct.unpack('H',s[10:12])[0])
>  d['source_address']=pcap.ntoa(struct.unpack('i',s[12:16])[0])
>  d['destination_address']=pcap.ntoa(struct.unpack('i',s[16:20])[0])
>  if d['header_len']>5:
>    d['options']=s[20:4*(d['header_len']-5)]
>  else:
>    d['options']=None
>  d['data']=s[4*d['header_len']:]
>  return d
> 
> def dumphex(s):
>  bytes = map(lambda x: '%.2x' % x, map(ord, s))
>  for i in xrange(0,len(bytes)/16):
>    print '    %s' % string.join(bytes[i*16:(i+1)*16],' ')
>  print '    %s' % string.join(bytes[(i+1)*16:],' ')
> 
> def print_packet(pktlen, data, timestamp):
>  if not data:
>    return
> 
>  if data[12:14]=='\x08\x00':
>    decoded=decode_ip_packet(data[14:])
>    print '\n%s.%f %s > %s' % (time.strftime('%H:%M',
>                                           time.localtime(timestamp)),
>                             timestamp % 60,
>                             decoded['source_address'],
>                             decoded['destination_address'])
>    for key in ['version', 'header_len', 'tos', 'total_len', 'id',
>                'flags', 'fragment_offset', 'ttl']:
>      print '  %s: %d' % (key, decoded[key])
>    print '  protocol: %s' % protocols[decoded['protocol']]
>    print '  header checksum: %d' % decoded['checksum']
>    print '  data:'
>    dumphex(decoded['data'])
> 
> if __name__=='__main__':
> 
>  if len(sys.argv) < 3:
>    print 'usage: sniff.py  '
>    sys.exit(0)
>  p = pcap.pcapObject()
> 
>  dev = sys.argv[1]
>  net, mask = pcap.lookupnet(dev)
>  # note:  to_ms does nothing on linux
>  p.open_live(dev, 1600, 0, 100)
> 
>  p.setfilter(string.join(sys.argv[2:],' '), 0, 0)
> 
>  try:
>    while 1:
>      p.dispatch(1, print_packet)
> 
>  except KeyboardInterrupt:
>    print '%s' % sys.exc_type
>    print 'shutting down'
>    print '%d packets received, %d packets dropped, %d packets dropped
> by interface' % p.stats()
> 
> ----- Original Message -----
> From: River <river at exoweb.net>
> Date: Tue, 7 Sep 2004 15:34:22 +0800
> Subject: [python-chinese] 请问在python下如何构建一个I CMP类似的IP包然后发出
> 去?
> To: python-chinese at lists.python.cn
> 
> C下很容易实现,但在python下能否进行呢,
> 虽然这不是python的擅长。
> 能否举个简单例子,谢谢。
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> *******************************************
> ±¾Ԋ¼��ʼ�¬ɧ·¢Ж,»��ª·¢ׁ£ºhelpdesk at zte.com.cn
> ********************************************
> 
> (Embedded image moved to file: pic24596.pcx)
> 
> *******************************************
> ���ʼ��Ѿ���,���ʼ����ˣ��緢��,��
> �ʼ�����ת���c�helpdesk at zte.com.cn
> ********************************************
> 
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 
> 
>


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号