【问题标题】:Python - Checking duplicates in a list and adding duplicates together to update the list with the summed valuePython - 检查列表中的重复项并将重复项添加在一起以使用总和值更新列表
【发布时间】:2023-04-07 00:10:01
【问题描述】:

我的问题的目的是阅读这样的帖子:

([
{
    'title': 'Invade Manhatten, anyone?',
    'tags': ['world-domination', 'hangout'],
    'posts': [
        {
            'author': 'Mr. Sinister',
            'content': "I'm thinking 9 pm?",
            'upvotes': 2,
        },
        {
            'author': 'Mystique',
            'content': "Sounds fun!",
            'upvotes': 0,
        },
        {
            'author': 'Magneto',
            'content': "I'm in!",
            'upvotes': 0,
        },
    ],
}

]))

并创建一个定义来输出:

[('Mr. Sinister', '2', 'Cautioiusly Evil'), ('Magneto', '0', 'Insignificantly Evil'), ('Mystique', '0', 'Insignificantly Evil')]

列表按点赞数从高到低排序,平局按字母顺序排列。

但是,当我收到这个帖子时:

([
{
    'title': 'Invade Manhatten, anyone?',
    'tags': ['world-domination', 'hangout'],
    'posts': [
        {
            'author': 'Mr. Sinister',
            'content': "I'm thinking 9 pm?",
            'upvotes': 2,
        },
        {
            'author': 'Mr. Sinister',
            'content': "Sounds fun!",
            'upvotes': 0,
        },
        {
            'author': 'Mr. Sinister',
            'content': "I'm in!",
            'upvotes': 0,
        },
    ],
}

]))

作者多次发帖的地方,我的程序输出:

[('Mr. Sinister', '2', 'Cautioiusly Evil'), ('Mr. Sinister', '0', 'Insignificantly Evil'), ('Mr. Sinister', '0', 'Insignificantly Evil')]

我的程序打印每个单独的帖子,而不是像这样组合结果:

[('Mr. Sinister', 2, 'Cautiously Evil')]

澄清一下,如果线程是:

([
{
    'title': 'Invade Manhatten, anyone?',
    'tags': ['world-domination', 'hangout'],
    'posts': [
        {
            'author': 'Mr. Sinister',
            'content': "I'm thinking 9 pm?",
            'upvotes': 2,
        },
        {
            'author': 'Loki',
            'content': "Sounds fun!",
            'upvotes': 2,
        },
        {
            'author': 'Mr. Sinister',
            'content': "I'm in!",
            'upvotes': 2,
        },
        {
            'author': 'Loki',
            'content': "I'm in it!",
            'upvotes': 20,
        },

    ],
}

]))

应该输入:

[('Loki', 22, 'Justifiably Evil'), ('Mr. Sinister', 4, 'Cautiously Evil')]

我的代码在这里:

  def author_rankings(thread_list):
# TODO: Determine (author, upvotes, ranking) over all threads.
counterA = 0
counterB=2

listA = []
Final = []
Double = {}
for i in thread_list[0]['posts']:
    for ii in i:
        if ii == 'content':
            null = 1
        else:
            b = str(i[ii])
            if b in Double:
              Double[b]
            a = b
            if a.isdigit():
              a = int(a)
            listA.append(a)
bel=[]
for qq in listA:
    if counterA == counterB:
        bel = []
        counterB+=2
    if counterA%2 ==0:
         bel.append(qq)
         counterA+=1
    else:
       bel.append(qq)
       qq = int(qq)
       if qq == 0:
           bel.append('Insignificantly Evil')

     elif qq < 20:
          bel.append('Cautiously Evil')


     elif qq < 100:
          bel.append('Justifiably Evil')

     elif qq < 500:
           bel.append('Wickedly Evil')

     elif qq >= 500:
          bel.append('Diabolically Evil')

     counterA+=1



     tuuple = tuple(bel)
     Final.append(tuuple)



Final.sort()      

Final.sort(key=lambda tup: -tup[1])

我知道我的代码有点不符合 Python 风格/难以阅读。很抱歉给您带来不便。

谢谢!

【问题讨论】:

  • 你想总结一下作者的点赞数吗?
  • 对不起,这东西是不可读的,它不是“有点不像pythonic”,它是魔鬼的作品。你至少不能给出有意义的名字之类的吗?在提供帮助的同时让我们的生活更轻松?
  • @droravr 对不起!我将变量更改为更易于理解的名称。
  • 迭代帖子并将数据保存在author:upvote 对的字典中,在迭代过程中添加赞成票。您必须使用字典 get 方法或首先测试或捕获 KeyError 或使用集合字典容器来解决丢失键的问题。当帖子完成后,遍历字典项并通过添加适当的 evilness 来构造元组。

标签:
python
python-3.x