当前位置: 首页 > 面试题库 >

如何在Python中对存储在字典中的IP地址进行排序?

景同
2023-03-14
问题内容

我有一段代码看起来像这样:

ipCount = defaultdict(int)

for logLine in logLines:
    date, serverIp, clientIp = logLine.split(" ")
    ipCount[clientIp] += 1

for clientIp, hitCount in sorted(ipCount.items), key=operator.itemgetter(0)):
    print(clientIp)

和某种IP,但是像这样:

192.168.102.105
192.168.204.111
192.168.99.11

这还不够好,因为无法识别99比102或204小。我希望输出如下:

192.168.99.11
192.168.102.105
192.168.204.111

我找到了,但是我不确定如何在我的代码中实现它,或者因为使用字典,所以甚至不可能实现它。我在这里有什么选择?谢谢..


问题答案:

您可以使用自定义key函数返回字符串的可排序表示形式:

def split_ip(ip):
    """Split a IP address given as string into a 4-tuple of integers."""
    return tuple(int(part) for part in ip.split('.'))

def my_key(item):
    return split_ip(item[0])

items = sorted(ipCount.items(), key=my_key)

split_ip()函数采用IP地址字符串之类,'192.168.102.105'然后将其转换为整数元组(192, 168, 102, 105)。Python内置支持按字典顺序对元组进行排序。

UPDATE
:实际上,使用模块中的inet_aton()函数可以更轻松地完成此操作socket

import socket
items = sorted(ipCount.items(), key=lambda item: socket.inet_aton(item[0]))


 类似资料:
  • 问题内容: 我有一个字典,其中每个键都引用一个int值。根据值将键排序到列表中的最佳方法是什么? 问题答案: mydict = {‘a’:1,’b’:3,’c’:2} >>> sorted(mydict, key=lambda key: mydict[key]) [‘a’, ‘c’, ‘b’]

  • 问题内容: 我有以下字典。 如何根据排序。因此,结果字典将如下所示。 问题答案: 从订购的项目元组列表构造一个: (假设Python 3,在Python 2中应该做同样的事情。)

  • 问题内容: 这个问题已经在这里有了答案 : 在Oracle中表示IPv4 / IPv6地址 (7个答案) 8年前关闭。 我创建了一个表来存储IP地址。 但是当我尝试插入表中时,它给了我一个错误: 无论如何,我可以在SQL表中存储一个带有很多小数位的数字,如果是的话,我应该使用什么数据类型?请指教。 提前致谢! 问题答案: 您有几种选择: 将其存储为VARCHAR。IP地址实际上不是您可能会做数学运

  • 问题内容: 验证用户输入的IP有效的最佳方法是什么?它以字符串形式出现。 问题答案: 不要解析它。只是问问。

  • 本文向大家介绍在Python中按字典顺序对单词进行排序,包括了在Python中按字典顺序对单词进行排序的使用技巧和注意事项,需要的朋友参考一下 按字典顺序对单词进行排序意味着我们要首先按单词的第一个字母排列它们。然后,对于第一个字母相同的单词,我们将它们按第二个字母排列在该组中,依此类推,就像在语言的词典中一样(不是数据结构)。 Python有2个函数,按照这种类型的顺序进行排序和排序,让我们看看

  • 问题内容: 我正在尝试获得一个函数,如果您对它进行排序(列表名),它将对该列表中的所有数字进行从最小到最大的排序。 我不确定我的问题是什么,但是我需要一些帮助,因为输出实际上并不是最小到最大,对于输出的前两个数字来说,它最小到最大。 范例: 如果list中有23、212、44个,而不是我对它进行排序,则输出将是这样。 输出: 212,23,44 它 应该是 23、44、212。 码: 更多代码: