У меня есть вложенный код JSON как (на самом деле это мои обновления статуса Facebook)
{
"data": [
{
"id": "1290561400000000",
"from": {
"name": "My name",
"id": "500920000"
},
"message": "Message body",
"updated_time": "2010-08-24T08:22:13+0000",
"comments": {
"data": [
{
"id": "129056140474641_8000",
"from": {
"name": "name1",
"id": "100000486072000"
},
"message": "hahahahahahha..........",
"created_time": "2010-08-24T08:40:39+0000"
},
{
"id": "129056140474641_8000000",
"from": {
"name": "name2",
"id": "1597542457"
},
"message": "true ya. I have updated",
"created_time": "2010-08-24T08:59:53+0000"
},
{
"id": "129056140474641_83000",
"from": {
"name": "Name3",
"id": "1000004860700000"
},
"message": "am putting it on my wall....",
"created_time": "2010-08-24T09:01:25+0000"
}
],
}
}
]
Теперь, как мне получить доступ к комментариям для определенного обновления и распечатать его через Цикл ?? (я получаю, скажем, пару обновлений одновременно). b = [1, 0, 0, 0, 1, 1, 1, 0] # или любой итерируемый с логическими значениями Как мне написать ...
Я начинаю со следующего списка с
и bitmask b
:
s = ['baa', 'baa', 'black', 'sheep', 'have', 'you', 'any', 'wool']
b = [1, 0, 0, 0, 1, 1, 1, 0] # or any iterable with boolean values
Как написать некоторую функцию apply_bitmask (s, b)
, чтобы она возвращала
['baa', 'have', 'you', 'any']
Python 3.1 itertools.compress (или Python 2.7, если вы еще не обновились) делает именно это (понимание списка занимает второе место):
import itertools
filtered = itertools.compress(s, b)
Обратите внимание, что это создает итератор, а не список. Экономит память, но если вам нужно повторить ее несколько раз или использовать индексы, вы всегда можете использовать list(itertools.compress(s, b))
. Еще короче.
Вы можете использовать составления списков :
newList = [word for (word, mask) in zip(s,b) if mask]
# Note: Could also use 'if mask == blah', if mask is not a boolean-compatible type.
Сначала будут взяты исходные два списка, а сжать их вместе, чтобы вы получить (временный - он все еще находится внутри списка comp!) список пар слов и их масок - что-то вроде [('baa', 1), ('baa', 0), ...]
. Затем в newList
добавляются только слова с маской 1 ( if mask == 1
).