我尝试在python上做某事。
我尝试编写一个带有可迭代参数并生成2个元素的元组的函数:
这是我的代码
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: s1
servicePort: 80
- path: /bar
backend:
serviceName: s2
servicePort: 80
输出:
liste = ['a','b','a','a','b']
compte = {}.fromkeys(set(liste),0)
for valeur in liste:
compte[valeur] += 1
print(compte)
但是我想获得{'b': 2, 'a': 3}
感谢帮助
答案 0 :(得分:3)
您的预期结果是列表,而不是字典。解决您的代码的方法是使用您的字典进行计数,但将其追加到列表中:
>>> liste = ['a','b','a','a','b']
>>>
>>> compte = dict.fromkeys(liste,0) #Or use a default dict
>>> result = []
>>> for valeur in liste:
... compte[valeur] += 1
... result.append((valeur,compte[valeur]))
...
>>> print(result)
[('a', 1), ('b', 1), ('a', 2), ('a', 3), ('b', 2)]
答案 1 :(得分:2)
使用生成器函数。
from collections import defaultdict
def with_running_count(values):
counts = defaultdict(int)
for value in values:
counts[value] += 1
yield value, counts[value]
>>> print(*with_running_count('abaab'))
('a', 1) ('b', 1) ('a', 2) ('a', 3) ('b', 2)
使用生成器而不是其他建议的一个优点是生成器是惰性的。这意味着您可以传递返回无限(或非常大)数据流的迭代器,因为生成器仅在需要时才使用输入流。
# an endless iterator
coin = iter(lambda: random.choice(['heads', 'tails']), None)
# the running count will also be endless
toss = with_running_count(coin)
>>> next(toss), next(toss), next(toss)
(('tails', 1), ('tails', 2), ('heads', 1))
答案 2 :(得分:2)
您可以通过以下方式修改代码:
liste = ['a','b','a','a','b']
liste2 = []
compte = {}.fromkeys(set(liste),0)
for valeur in liste:
compte[valeur] += 1
liste2.append(valeur + ':' + str(compte[valeur]))
print(liste2)
重要的是要说:您要执行的操作不是元组,而是列表,因为它是可变的。您的compte
变量是dictionary
。
答案 3 :(得分:1)
您可以在进行计数时初始化字典:
liste = ['a','b','a','a','b']
compte = {}
result = []
for valeur in liste:
compte[valeur] = compte.get(valeur, 0) + 1
result.append((valeur, compte[valeur]))
print(result)
答案 4 :(得分:1)
您可以从Counter
模块使用collections
:
from collections import Counter
liste = ['a','b','a','a','b']
def counter(iterable):
c = Counter()
for i in iterable:
c.update(i)
yield i, c[i]
print(list(counter(liste)))
输出:
[('a', 1), ('b', 1), ('a', 2), ('a', 3), ('b', 2)]