我有一个词典列表:
some_list = [
{
item1:'a',
item2:['1', '2']
},
{
item1:'b',
item2:['1', '2']
},
{
item1:'a',
item2:['1']
}
]
我想得到:
['a 1','a 2','b 1','b 2']其中第1项中的每个值与每个字典中第2项的值配对,然后只剩下唯一的字符串。
我可以想出一个明显的方法,即:
我想知道这些使用列表理解是否更优雅。
答案 0 :(得分:4)
如果顺序无关紧要,那么您可以轻松地将您的逻辑转换为set-comprehnsion(如果您愿意,可以转换为list
):
In [1]: some_list = [
...: {
...: 'item1':'a',
...: 'item2':['1', '2']
...: },
...: {
...: 'item1':'b',
...: 'item2':['1', '2']
...: },
...: {
...: 'item1':'a',
...: 'item2':['1']
...: }
...: ]
In [2]: {f"{d['item1']} {v}" for d in some_list for v in d['item2']}
Out[2]: {'a 1', 'a 2', 'b 1', 'b 2'}
答案 1 :(得分:1)
FUNCTION IsDate( p_str IN VARCHAR2, p_format IN VARCHAR2 ) RETURN NUMBER AS
V_date DATE;
BEGIN
V_Date := TO_DATE( p_str, p_format );
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
这应该有效
答案 2 :(得分:1)
another formatting option, runs back to 2.7
sorted(map(' '.join,
{(d['item1'], v)
for d in some_list
for v in d['item2']}))
still a 'one-liner' but with decorative line breaks and indentation
inner list comp same as other ans, arrived at independently without seeing it 1st