2016-12-07 54 views
-2

Я пробовал, но пока не могу понять это. Я хочу создать список кортежей, каждый из которых построено из словарных значений:Создание кортежа из * args

my_list = [(x['field1'], x['field2']) for x in my_dict] 

Но проблема в том, что я хочу сделать это внутри функцию, передавая поля, я хочу, чтобы добраться до * аргументов:

my_func('field1', 'field2') 

Как я могу создать первое понимание списка из списка * args?

Спасибо!

Попробую уточнить:

Кратко, что я хочу сделать, это карта это:

my_func('field1', 'field2') 

Для этого:

tuple(x['field1'], x['field2']) 

Который будет заявление в my_func (* args)

+1

Не так ясно, что вы хотите сделать. Можете ли вы привести пример (или два) с нужным вам вводом/выводом? – Dekel

+0

Неясно ... что такое 'my_dict' в этом ... список словарей? Вы хотите получить другое поле из каждого элемента 'my_dict'? – donkopotamus

+0

Как вы спрашиваете? Создание кортежей из аргументов функции? Итак, вы хотите функцию, которая вернет кортеж? – pagep

ответ

1

Вы можете создать tuple, делая другое понимание над args:

def my_func(*args): 
    return [tuple(x[arg] for arg in args) for x in my_dict] 

Однако это предполагает, что ваш my_dict является глобальной переменной. Но теперь вы можете называть его так, как вы указали с my_func('field1', 'field2').

Я бы посоветовал добавить словарь в определении функции:

def my_func(my_dict, *args): 
    return [tuple(x[arg] for arg in args) for x in my_dict] 

и называют его my_func(my_dict, 'field1', 'field2')

+0

Это нормально, на самом деле функция более сложна и включает в себя Словарь. Я сделал это проще, поэтому вопрос яснее. Еще раз спасибо! – Ivan

0

Просто обратитесь к этим аргументам как обычно:

def f(d, a, b): 
    return [(x[a], x[b]) for x in d] 

result = f(my_dict, 'field1', 'field2')