Python从列表项中获取特定信息并创建新的列表项

Python从列表项中获取特定信息并创建新的列表项,python,Python,我在我的第一个python项目中使用列表 data_items = [{"ID":0x1111, "Description":"data1", "Writable":"FALSE"}, {"ID":0x2222, "Description":"data2", "Writable":"TRUE"}, {"ID":0x3333, "Description":"data3", "Writable":"FALSE"}, {"ID":0x4444, "

我在我的第一个python项目中使用列表

data_items = [{"ID":0x1111,  "Description":"data1",  "Writable":"FALSE"},
      {"ID":0x2222,  "Description":"data2",  "Writable":"TRUE"},
      {"ID":0x3333,   "Description":"data3", "Writable":"FALSE"}, 
      {"ID":0x4444,   "Description":"data4", "Writable":"TRUE"}]
我想使用另一个列表名“new_data_items”,只显示真实的条件,如下面的示例:如何为此循环编写for

new_data_items = [{"ID":0x2222,  "Description":"data2",  "Writable":"TRUE"},
          {"ID":0x4444,   "Description":"data4", "Writable":"TRUE"}]

使用python列表压缩

[_ for _ in data_items if _.get('Writable') == 'TRUE']
点击此链接:

您可以使用此链接:

filter(lambda x: x['Writable'] == 'TRUE', data_items)
请注意,筛选器返回一个迭代器,因此您可能还希望将其转换为列表:

list(filter(lambda x: x['Writable'] == 'TRUE', data_items))
如果某些记录的“可写”字段可能不存在,请将索引替换为
。获取

list(filter(lambda x: x.get('Writable') == 'TRUE', data_items))

您可以执行以下操作:

new_data_items = []
for item in data_items:
    if item['Writable'] == 'TRUE':
        new_data_items.append(item)
但列表理解会更快,更不冗长:

new_data_items = [item for item in data_items if item['Writable'] == 'TRUE']

[item for item in data.\u items if item.get(“Writable”)==“TRUE”]
的可能重复项这比理解慢,比使用lambdas进行过滤更冗长@JaredSmith指出,列表理解会快得多。只是好奇,为什么要使用
\u
通常用于不需要的变量。\在python中用于临时变量。如果您不关心变量名,那么最好使用“\u”而不是使用i,j@Himanshudua实际上我认为埃里克是对的。下划线通常表示将不使用的变量。@IvayloStrandjev我不知道
\uuu
不用于临时变量。例如,如果您不关心
y
,则可以使用
x,uz=coordinates
。但是对一个重要的变量使用
\uuu
会降低代码的可读性。
data_items = [{"ID":0x1111,  "Description":"data1",  "Writable":"FALSE"},
  {"ID":0x2222,  "Description":"data2",  "Writable":"TRUE"},
  {"ID":0x3333,   "Description":"data3", "Writable":"FALSE"},
  {"ID":0x4444,   "Description":"data4", "Writable":"TRUE"}]

new_data = list()
for element in data_items:
    value = element.get('Writable')
    if not value == "FALSE":
        new_data.append(element)

print new_data