Python 你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Ver
Python 你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Ver,python,list,loops,Python,List,Loops,你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Verawan,这没有问题,检查dict大小始终会正常工作,takewhile还将获取不存在0的所有列表,因此无论发生什么情况,您都将得到正确的结果。重要的部分是dict的长度。你不能使用module。我不确定是否要根据@John的回答改变我的回答以
你不能使用模吗?你知道一组3个元素中的第一个总是会出现零吗?如果没有,该三元组是否应包括在列表中?不,零可以出现在任何地方,如果字典包含零,则会丢弃该零,并终止循环。@Verawan,那么键的顺序如何?@PadraicCcningham,如图所示。@Verawan,这没有问题,检查dict大小始终会正常工作,takewhile还将获取不存在0的所有列表,因此无论发生什么情况,您都将得到正确的结果。重要的部分是dict的长度。你不能使用module。我不确定是否要根据@John的回答改变我的回答以生成一系列dict:)这似乎就是这里的想法!我不确定是否要改变我的回答,根据@John的回答生成一个dict序列:)这似乎就是这里的想法!这创建了一个单独的dict@Padraic Cunningham谢谢..我想问题被修改了..我没有看到..谢谢..顺便说一句,你的答案是最优雅的,我会选择它作为Anwser这创建了一个单独的dict@Padraic Cunningham谢谢..我想问题被修改了..我没有看到..谢谢..顺便说一句,你的答案是最优雅的,我知道在你的第一个
groups
函数中会选择它作为anwserin,为什么它没有一个返回语句?@verawan,因为我们正在屈服,而每个dict的len等于n
,或者我们只是打破循环,因为我们在末尾有一个dict,它没有三个元素,因为第一个0位于一个,不是3的倍数。您可以迭代组(l,keys,0,3))
并动态获取每个dict,您不必调用list并将整个dict列表存储在内存中,这是使用生成器的优势。如果您想要具有n
键的dict,您需要检查每个dict的长度,答案第二部分中的输入将在结尾处留下一个奇数长度的dict。我知道,奇怪的是,我试着运行您的代码:,这将在这里和我的机器上产生一个无限循环。@Verawan,是的,对不起,我没有添加任何解释,我只是想确保我们涵盖了所有情况,itertools库绝对值得花点时间熟悉。在您的第一个组函数中,为什么没有返回语句?@VeraWang,因为我们是屈服的,而每个dict的len等于n
,或者我们只是打破循环,因为我们的dict末尾没有三个元素,因为第一个0位于一个不是3的倍数的索引处。您可以迭代组(l,keys,0,3))
并动态获取每个dict,您不必调用list并将整个dict列表存储在内存中,这是使用生成器的优势。如果您想要具有n
键的dict,您需要检查每个dict的长度,答案第二部分中的输入将在结尾处留下一个奇数长度的dict。我知道,奇怪的是,我试着运行您的代码:,这将在这里和我的机器上产生一个无限循环。@Verawan,是的,对不起,我没有添加任何解释,我只是想确保我们涵盖了所有情况,itertools库绝对值得花一些时间熟悉。
from collections import defaultdict
def f(xs, labels=("gold", "silver", "bronze")):
d = defaultdict(int)
n = 0
for i, x in enumerate(xs):
if x == 0: # break if we see a 0
return d
d[labels[n]] += i # update our counts
# cycle through gold/silver/bronze (labels)
n += 1
if n % 3 == 0:
n = 0
return d
xs = [1, 2, 3, 4, 5, 6, 0, 9, 2]
d = f(xs)
print d
$ python foo.py
defaultdict(<type 'int'>, {'bronze': 7, 'silver': 5, 'gold': 3})
from itertools import cycle
placings = cycle(['gold', 'silver', 'bronze'])
numbers = [1,2,3,4,5,6,0,9,2]
def zipper(numbers, placings):
d = {}
for n, c in zip(numbers, placings):
if n == 0:
break
d[n] = c
if n % 3 == 0:
yield d
d = {}
print list(zipper(numbers, placings))
listOfDictionary = []
lst = [1,2,3,4,5,6,0,9,2]
ind = lst.index(0) #Tells where to break the iteration loop.
medals = ["gold", "silver", "bronze"]
if ind%3==0:
newlst = [lst[i: i+3]for i in xrange(0,ind,3)]
#newlst = [[1, 2, 3], [4, 5, 6]]
for lsst in newlst:
listOfDictionary.append(dict(zip(medals, lsst)))
print listOfDictionary
>>> [{'bronze': 3, 'silver': 2, 'gold': 1}, {'bronze': 6, 'silver': 5, 'gold': 4}]
In [61]: mykeys
Out[61]: [1, 2, 3, 4, 5, 6, 0, 9, 2]
In [63]: mykeys1=[i for i in mykeys[:-1 if 0 not in mykeys else mykeys.index(0)]]
In [64]: myvalues
Out[64]: ['gold', 'silver', 'bronze']
In [66]: myvalues1=cycle(myvalues)
In [67]: mydict=dict(zip(mykeys1,myvalues1))
In [68]: mydict
Out[68]: {1: 'gold', 2: 'silver', 3: 'bronze', 4: 'gold', 5: 'silver', 6: 'bronze'}
In [69]: [dict(mydict.items()[i:i+3]) for i in range(0,len(mykeys1),3)]
Out[69]: [{1: 'gold', 2: 'silver', 3: 'bronze'}, {4: 'gold', 5: 'silver', 6: 'bronze'}]
from itertools import takewhile, islice
def groups(l, keys, i, n):
# lambda x: x != 0 -> take elements until we encounter any 0
tk = takewhile(lambda x: x != i, l)
while True:
d = dict(zip(keys, islice(tk, n)))
if len(d) == n: # make sure we have n keys in the dict
yield d
else:
break
keys = ['gold', 'silver', 'bronze']
print(list(groups(l,keys,0,3)))
[{'bronze': 3, 'gold': 1, 'silver': 2}, {'bronze': 6, 'gold': 4, 'silver': 5}]
from itertools import takewhile, islice,chain
def groups(l, keys, i, n):
tk = takewhile(lambda x: x != i, l)
return (dict(zip(keys, chain(islice(tk, n - 1),(i,)))) for i in tk)
In [5]: l = [1, 2, 3, 4, 5, 6, 7, 11, 6, 9, 0, 2]
In [6]: list(groups(l,['gold', 'silver', 'bronze'],0,3))
Out[6]:
[{'bronze': 1, 'gold': 2, 'silver': 3},
{'bronze': 4, 'gold': 5, 'silver': 6},
{'bronze': 7, 'gold': 11, 'silver': 6},
{'gold': 9}]
def groups(l, keys, i, n):
tk = takewhile(lambda x: x != i, l)
return filter(lambda x: len(x) == n, (dict(zip(keys, chain(islice(tk, n - 1),(i,))))
for i in tk))
In [8]: list(groups(l,['gold', 'silver', 'bronze'],0,3))
Out[8]:
[{'bronze': 1, 'gold': 2, 'silver': 3},
{'bronze': 4, 'gold': 5, 'silver': 6},
{'bronze': 7, 'gold': 11, 'silver': 6}]