RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1539164
Accepted
babyborn
babyborn
Asked:2023-09-05 17:44:06 +0000 UTC2023-09-05 17:44:06 +0000 UTC 2023-09-05 17:44:06 +0000 UTC

统计并输出JSON中的重复值

  • 772

有一个包含 JSON 对象的列表,例如:

[{'id':'1', 'name':'ivan'},{'id':'2', 'name':'igor'},{'id':'3', 'name':'petr'}]

我需要找到所有重复的名称“名称”并成对输出它们(甚至更多 - 如果有更多匹配项),就像这里是第一个对象,这里是第二个、第三个、第四个......,名称是相同。我看到一种解决方案,将对象逐个添加到新列表中,然后将其与原始列表进行比较,如果有匹配,则'name'执行print,然后清除新列表等等,但我觉得有一个更简洁的解决方案

我希望输出是这样的:

{'id':'1', 'name':'ivan'}
{'id':'5', 'name':'ivan'}
{'id':'88', 'name':'ivan'}

{'id':'45', 'name':'igor'}
{'id':'61', 'name':'igor'}
{'id':'1', 'name':'igor'}
{'id':'666', 'name':'igor'}

{'id':'56', 'name':'petr'}
{'id':'89', 'name':'petr'}
...
python
  • 2 2 个回答
  • 26 Views

2 个回答

  • Voted
  1. Best Answer
    Acinit
    2023-09-05T18:36:48Z2023-09-05T18:36:48Z

    想出了以下解决方案,简短

    from collections import Counter
    
    name_counts = Counter(item["name"] for item in data)
    result = sorted([item for item in data if name_counts[item["name"]] > 1],key = lambda x: x['name'])
    
    print(result)
    

    我们指的data是以下一组数据

    data = [
        {"id": "1", "name": "ivan"},
        {"id": "2", "name": "igor"},
        {"id": "3", "name": "petr"},
        {"id": "4", "name": "ivan"},
        {"id": "5", "name": "igor"},
        {"id": "6", "name": "maria"},
        {"id": "7", "name": "anna"},
        {"id": "8", "name": "alex"},
        {"id": "9", "name": "maria"},
        {"id": "10", "name": "max"},
        {"id": "11", "name": "elena"},
        {"id": "12", "name": "pavel"},
        {"id": "13", "name": "elena"},
        {"id": "14", "name": "natalia"},
        {"id": "15", "name": "dmitry"}
    ]
    

    工作结果(在终端中输出)

    [{'id': '11', 'name': 'elena'}, {'id': '13', 'name': 'elena'}, {'id': '2', 'name': 'igor'}, {'id': '5', 'name': 'igor'}, {'id': '1', 'name': 'ivan'}, {'id': '4', 'name': 'ivan'}, {'id':
    '6', 'name': 'maria'}, {'id': '9', 'name': 'maria'}]
    

    ps如果你的目标是删除重复项,那么你不能排序

    from collections import Counter
    
    name_counts = Counter(item["name"] for item in data)
    result = [item for item in data if name_counts[item["name"]] > 1]
    
    print(result)
    

    结果:

    [{'id': '1', 'name': 'ivan'}, {'id': '2', 'name': 'igor'}, {'id': '4', 'name': 'ivan'}, {'id': '5', 'name': 'igor'}, {'id':
    '6', 'name': 'maria'}, {'id': '9', 'name': 'maria'}, {'id': '11', 'name': 'elena'}, {'id': '13', 'name': 'elena'}]
    

    这样输出就和你的一样了,然后你就可以

    from collections import Counter
    
    name_counts = Counter(item["name"] for item in data)
    result = sorted([item for item in data if name_counts[item["name"]] > 1],key = lambda x: x['name'])
    
    n = result[0]['name']  # Здесь мы инициализируем переменную 'n' значением имени первого элемента в списке 'result'.
    for item in result:
        # Далее идет цикл, который проходит по каждому элементу 'item' в списке 'result'.
        
        # В этой строке мы проверяем, равно ли имя текущего элемента 'item' имени, хранящемуся в переменной 'n'.
        # Если имена совпадают, то мы просто выводим 'item', иначе добавляем пустую строку перед выводом элемента 'item'.
        print(item if n == item['name'] else f'\n{item}')
        
        # Здесь мы обновляем значение переменной 'n' новым именем текущего элемента 'item'.
        n = item['name']
    

    终端输出:

    {'id': '11', 'name': 'elena'}
    {'id': '13', 'name': 'elena'}
    
    {'id': '2', 'name': 'igor'}
    {'id': '5', 'name': 'igor'}
    
    {'id': '1', 'name': 'ivan'}
    {'id': '4', 'name': 'ivan'}
    
    {'id': '6', 'name': 'maria'}
    {'id': '9', 'name': 'maria'}
    
    • 2
  2. wchistow
    2023-09-05T17:56:37Z2023-09-05T17:56:37Z

    有可能是这样的:

    data = [
        {'id': '1', 'name': 'ivan'},
        ...
    ]
    
    names = {}
    
    # Сохраняем все словари с одинаковыми ключами `name` в один список
    for person in data:
        if person['name'] not in names.keys():
            names[person['name']] = []
        names[person['name']].append(person)
    
    # Выводим списки
    for name, people in names.items():
        print(*people, sep='\n')
        print()
    

    结论:

    {'id': '1', 'name': 'ivan'}
    {'id': '5', 'name': 'ivan'}
    ...
    
    {'id': '45', 'name': 'igor'}
    {'id': '61', 'name': 'igor'}
    ...
    
    {'id': '56', 'name': 'petr'}
    ...
    
    

    最后只显示了一个空行,但我认为这并不可怕。

    • 0

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5