-1

python中字典中的元素是否按特定顺序排列?

我想做类似的事情:

for i in dict:
    for j in dict[e:]:

运行此代码时出现错误。您将如何实现两个 for 循环,其中第二个将仅通过第二个循环中的元素之后的元素运行?

按要求编辑:字典属于

class Num:
    def __init__(self, sum = 0):
        self.sum = sum

我想将所有数字与所有其他数字相乘,并将每个 Num 的结果添加到成员总和中。例子:

dict = {1: Num(), 2: Num(), 3: Num()}

所需的 for 循环将执行以下操作:

dict[1].sum += 1*2
dict[2].sum += 1*2
dict[1].sum += 1*3
dict[3].sum += 1*3
dict[2].sum += 2*3
dict[3].sum += 2*3

我需要for循环

或等效于此:

for i in dict:
    for j in dict[e:]:

有没有类似HashableDict 的东西?

4

4 回答 4

1

字典没有顺序/索引。您可以使用 OrderedDict 或首先列出字典项。

mydict.items() #returns your dictionary in list for with tuples(key,value) with order

所以对你来说,

class Num:
    def __init__(self, sum = 0):
        self.sum = sum

    def _add(self,num):
        self.sum += num

mydict = {1:Num(), 2:Num(), 3:Num()}

for key in mydict:
    mydict[key]._add(sum([key*otherkey for otherkey in mydict if otherkey != key]))

for key,value in mydict.items():
    print key,value.sum

输出:

 1 5
 2 8
 3 9
于 2013-08-13T14:13:54.830 回答
1

取决于你想做什么。

如果您想将您的 dict 划分为较小的相同大小的块,您可以通过以下方式进行keys()

keys = d.keys()
for key in keys[5:]:
    print key, d[key]
于 2013-08-13T14:20:51.427 回答
0

Python 有一个OrderedDict,其中元素是根据插入时间排序的。

您可以通过以下方式将您的字典转换为有序字典:

orderedDict = OrderedDict(sorted(yourDict.items(), key=lambda t: t[0]))
于 2013-08-13T14:25:03.863 回答
0

既然您想做什么已经很清楚了,您似乎更想组合这些键。

import itertools
d = {1: Num(), 2: Num(), 3: Num()}
for i, j in itertools.product(dict.keys(), dict.keys()):
    if i != j:
        dict[i].sum += i*j
        dict[j].sum += i*j
于 2013-08-13T14:27:26.060 回答