답변이 받아 들여졌지만, 문자열을 함께 추가하는 대신 join()을 사용하는 방법에 대한 예제를 참조로 포함시킬 것입니다. 이것은 또한을 보여줍니다 그것의 피할 수 없음 값 없음 : 여기
keys = ('c', 'g', 'f', 'm')
''.join([v for v in (d[k] for k in keys) if v is not None])
이 차이를 보여주는 테스트입니다 :
d = {u'a': u'a', u'c': None, u'b': u'b', u'e': None, u'd': None, u'g': u'g', u'f': u'f', u'i': u'i', u'h': u'h', u'k': u'k', u'j': u'j', u'm': None, u'l': u'l', u'o': u'o', u'n': None, u'p': u'p'}
resolve = ''.join((value for value in d.itervalues() if value is not None))
print resolve
# u'abgfihkjlop'
을 그리고 당신이하고 싶었던 만 루프는 키 소정 집합에 있다면 접근 목록에 추가, 함께 문자열을 추가 :
from time import time
d = {}
for i in xrange(1000):
v = u'v%d' % i
d[v] = v
def test1():
return ''.join(v for v in d.itervalues() if v is not None)
def test2():
result = []
for v in d.itervalues():
if v is not None:
result.append(v)
return ''.join(result)
def test3():
result = ''
for v in d.itervalues():
if v is not None:
result += v
return result
def timeit(fn):
start = time()
r = fn()
end = time() - start
print "Sec:", end, "msec:", end*1000
>>> timeit(test1)
Sec: 0.000195980072021 msec: 0.195980072021
>>> timeit(test2)
Sec: 0.000204086303711 msec: 0.204086303711
>>> timeit(test3)
Sec: 0.000397920608521 msec: 0.397920608521
당신은 당신의 루프가 커질 때 정말 차이가 있음을 볼 수 있습니다.
출처
2012-02-01 23:13:32
jdi
방금 시도했지만 제대로 작동합니다. 실제 오류를 표시하고 게시하는 예를 만드십시오. 이러한 자주 수정되는 사항은 다소 미흡합니다. –
그것은 나를 위해 잘 작동 – RanRag
여기에 몇 가지 누락 된 정보가 있다고 생각합니다. 'foo'는 분명히 django Query 객체 또는 pymongo 래퍼 일종의 defaultdict처럼 작동하며 누락 된 키에 대해 None을 반환합니다. 아스키와 유니 코드를 추가하는 데는 아무런 문제가 없습니다 (루프가 좋지 않아도 가입해야합니다). 'resolve'는 분명히 None이므로 값을 확인해야합니다. – jdi