Pycassa col_fam.get_indexed_slices (предложение) Что не так - PullRequest
1 голос
/ 23 февраля 2012

Я не уверен, что мне не хватает некоторых основных правил программирования или некоторых основных правил использования PyCassa!

Проблема в следующем: Мне нужно запросить cassandra для отображения всех строк с column5 (имя столбца) со значением 5. Я могу напечатать этот результат в цикле for, но не снаружи. Мой текущий код:

expr2 = create_index_expression('column5', '5')
clause2 = create_index_clause([expr2], count=20)
for keyx, colx in col_fam.get_indexed_slices(clause):
      print colx

Это работает, но не работает:

expr2 = create_index_expression('column5', '5')
clause2 = create_index_clause([expr2], count=20)
for keyx, colx in col_fam.get_indexed_slices(clause):
    t = colx
    # ...
print t

Для некоторых я понимаю, что этот вопрос может показаться слишком дурацким ... но поверьте мне, я бьюсь над этим с прошлых выходных, а теперь, когда у меня нет другого выбора, я здесь, на Stackoverflow!

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

В первом примере t печатается на каждой итерации, что приводит к одной строке для каждой записи, соответствующей критериям. Во втором случае t заменяется во время каждой итерации, поэтому выводится только окончательное значение. Если вы просто хотите напечатать его, вы можете сделать отступ для оператора print, чтобы сделать его частью цикла, хотя первый пример будет работать для этого. Если вы хотите сохранить его в списке, создайте список и добавляйте к нему colx на каждой итерации:

expr2 = create_index_expression('column5', '5')
clause2 = create_index_clause([expr2], count=20)
t=[]
for keyx, colx in col_fam.get_indexed_slices(clause):
    t.append(colx)
print t
0 голосов
/ 29 мая 2012

Просто чтобы развернуть первый ответ, это один компактный способ получить выходные OrderedDictionaries в виде массивов (списков).

И я пропустил count=20, потому что вы сказали, что хотите все строки.

expr2 = create_index_expression('column5', '5')
clause2 = create_index_clause([expr2])

output = [colx.items() for keyx, colx in col_fam.get_indexed_slices(clause2)]

Или с сохранением обозначения цикла,

expr2 = create_index_expression('column5', '5')
clause2 = create_index_clause([expr2])
output = []

for keyx, colx in col_fam.get_indexed_slices(clause2):
    output.append (colx.items()) 

И да, во-вторых, массивы (списки) python используют нотацию [], а не {}.

...