输出格式不正确

2024-09-30 16:24:50 发布

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

我在python2.7中有一个代码,它获取一行文本作为其列表元素,并将其作为json返回。代码如下:

import itertools

lines=["Hamlet"
   ,"William Shakespeare",
   "Edited Barbara B Mowat Paul Werstine"
   ,"Michael Poston Rebecca Niles"]
LinesMap=dict()
for line in lines:
    list=[l for l in line.split(' ')]
    d = dict(itertools.izip_longest(*[iter(list)] * 2, fillvalue=None))
    LinesMap.update(d)

print(LinesMap)

输出为:

{'William': 'Shakespeare', 'Edited': 'Barbara', 'B': 'Mowat',    

'Michael':'Poston', 'Paul': 'Werstine', 'Rebecca': 'Niles', 'Hamlet': None}

鉴于它应该是:

{'Hamlet': None, 'William': 'Shakespeare', 'Edited': 'Barbara', 

'B':'Mowat', 'Paul': 'Werstine', 'Michael': 'Poston', 'Rebecca': 'Niles'}

如果我把单子再长一点,情况会更糟!为什么顺序不对?但是当我在python3.6中运行相同的代码时,当然使用python3语法,顺序是正确的。python3.6代码是:

import itertools

lines=["Hamlet"
   ,"William Shakespeare",
   "Edited Barbara B Mowat Paul Werstine"
   ,"Michael Poston Rebecca Niles"]
LinesMap=dict()
for line in lines:
   list=[l for l in line.split(' ')]
   d = dict(itertools.zip_longest(*[iter(list)] * 2, fillvalue=None))
   LinesMap = {**LinesMap, **d}

print(LinesMap) 

这是一个问题。另一个是,对于短列表,它可以正常运行。但当列表较长且元素过多时,输出不会显示任何内容,并且似乎已中断。这在windows和linux中是不会中断的。有什么问题?你知道吗

ps:出于某些原因,我不得不在Python2.7中运行它!你知道吗


Tags: 代码shakespearelinesrebeccaitertoolswilliammichaelpaul
1条回答
网友
1楼 · 发布于 2024-09-30 16:24:50

Pythondict对象没有内在的顺序,除了在Python的最新版本中,所以不能假设您将以与放入对象相同的顺序取出对象。你知道吗

如果需要该功能,可以使用OrderedDict对象。你知道吗

import random
from collections import OrderedDict

# Normal dict behavior:
numbers = {}
random_nums = (random.random() for _ in range(1000))
for i in random_nums:
    numbers[i] = random.random()
assert list(numbers.keys()) != list(random_nums)

# Ordered dict behavior:
numbers = OrderedDict()
for i in random_nums:
    numbers[i] = random.random()
assert list(numbers.keys()) == list(random_nums)

相关问题 更多 >