【问题标题】:Python dict issue when iterating [duplicate]迭代时的Python dict问题[重复]
【发布时间】:2016-10-29 20:23:16
【问题描述】:

我一直在到处寻找我的一个代码中出现的问题,但没有找到任何解决方案......这很烦人,这就是我问你这个问题的原因。

我正在使用带有键和值的简单字典,但问题是当我想在最后打印它时,它有一个奇怪的随机播放,其中两个字母是倒置的,例如“C”:“W”, “B”:“X”而不是“B”:“X”,“C”:“W”。这是我的代码(可能会更清楚)

PS。我在最后几行中首先尝试将 while 结构替换为 for 结构,但没有任何改进。

import random

m1 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]

l1 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]

class Separate:
#Used to separate objects in a list
    def __init__(self, d):
            self.d = d

            self.d = "".join(self.d)
            l = []
            for elt in range(0, len(self.d)):
                    l.append(self.d[elt])
            self.d = l

l1 = Separate(l1)
l1 = l1.d
m1 = Separate(m1)
m1 = m1.d

random.shuffle(m1)

key = {}

count = 0
while count < len(l1):
    key[l1[count]] = m1[count]
    count+=1

print(key)

这会返回(例如):

{
  'A': 'G', 
  'C': 'A', 
  'B': 'Z', 
  'E': 'U', 
  'D': 'I', 
  'G': 'W', 
  'F': 'X', 
  'I': 'C', 
  'H': 'K', 
  'K': 'T', 
  'J': 'E', 
  'M': 'F', 
  'L': 'B', 
  'O': 'V', 
  'N': 'D', 
  'Q': 'M', 
  'P': 'L', 
  'S': 'S', 
  'R': 'J', 
  'U': 'Q', 
  'T': 'Y', 
  'W': 'H', 
  'V': 'R', 
  'Y': 'P', 
  'X': 'N', 
  'Z': 'O'
}

【问题讨论】:

  • 与您的代码结构无关,但请不要将小写 L ("l") 用于变量 - 特别是在 1 旁边
  • 字典不跟踪任何订购信息。
  • 字典是无序的。阅读this
  • 您可以使用string 库获取所有字母。例如,m1 = [string.ascii_uppercase]
  • 我只是不明白为什么它似乎是按某种字母顺序排列的,但不是确切的。谢谢你这么快的回答。

标签: python python-3.x dictionary key iteration


【解决方案1】:

如 cmets 中所述,dicts 没有订单。如果您需要 dict 跟踪订单,请考虑使用 collections.OrderedDict

即:

import collections
key = collections.OrderedDict()

【讨论】:

  • 非常感谢您的评论正是我所需要的!
【解决方案2】:

您可以使用两个字符串文字和 zip:

m1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

l1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

key = {}

for m,l in zip(m1,l1):
    key.update({m:l})

print(key)

~

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多