Python:格式化列表中的数据

2024-09-22 20:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有很多这样的数据列表:

['Pardubický kraj', 'Pardubice', 'Libišany', 'Libišany']
['Královéhradecký kraj', 'Hradec Králové', 'Nechanice', 'Lubno u Nechanic']
['Královéhradecký kraj', 'Hradec Králové', 'Nechanice', 'Nechanice']

我需要创建一个字符串,如下所示:

Královéhradecký kraj`
  Hradec Králové
    1 Nechanice
      1a Lubo u Nechanic
      1b Nechanice

Pardubický kraj
  Pardubice
    2 Libišany
      2a Libišany

换句话说,每个列表的最后一个元素是唯一的,但是上面层次结构的其他元素可能是相同的,并且在协议的情况下可能不会重复。我还需要每个层次组按字母顺序排序。我不知道怎么做

如有任何建议,我将不胜感激

谢谢

编辑:

如果我再举一些例子:

['black', 'one', 'cat']
['black', 'two', 'dog']
['red', 'five', 'pig']
['pink', 'one', 'snake']

black
 1 one
  1a cat
 2 two
  2a dog

red
 3 five
  3a pig

pink
 4 one
  4a snake

Tags: 元素列表anyoneblackkrlovhradec
1条回答
网友
1楼 · 发布于 2024-09-22 20:38:58

我认为有一种更优雅的方式来写这个。我还没来得及拿到这个。因此,这里有一个快速和肮脏的版本,仍然为你做的把戏

x = [['black', 'sugar', 'second', 'dog'],
     ['red', 'cane', 'five', 'pig'],
     ['black', 'sugar', 'first', 'cat'],
     ['pink', 'cute', 'one', 'snake'],
     ['pink', 'angry', 'one', 'donkey'],
     ['black', 'sugar', 'third', 'bird'],
     ['red', 'cane', 'five', 'monkey'],
     ['pink', 'angry', 'one', 'spider']]

x.sort()

print (x[0][0])
print ('  ' + x[0][1])
print ('   1 ' + x[0][2])
print ('     1a '+x[0][3])

level_2 = 1
level_3 = 'a'

for i,a in enumerate(x[1:]):
    if a[0] == x[i][0]:
        if a[1] == x[i][1]:
            if a[2] == x[i][2]:
                level_3 = chr(ord(level_3) + 1)
            else:
                level_2 +=1
                level_3 = 'a'
                print ('   ' + str(level_2) + ' ' + a[2])
        else:
            level_2 +=1
            level_3 = 'a'
            print ('  ' + a[1])
            print ('   ' + str(level_2) + ' ' + a[2])
    else:
        level_2 +=1
        level_3 = 'a'
        print (a[0])
        print ('  ' + a[1])
        print ('   ' + str(level_2) + ' ' + a[2])
    print ('     ' + str(level_2) + level_3 + ' ' + a[3])

其输出为:

black
  sugar
   1 first
     1a cat
   2 second
     2a dog
   3 third
     3a bird
pink
  angry
   4 one
     4a donkey
     4b spider
  cute
   5 one
     5a snake
red
  cane
   6 five
     6a monkey
     6b pig

相关问题 更多 >