Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数参数中的动态变量_Python_List - Fatal编程技术网

Python 函数参数中的动态变量

Python 函数参数中的动态变量,python,list,Python,List,我尝试使用var的名称动态调用函数,但我不知道这是否可行,比如: fight_movies = list() # var how I want to use in function call win_movies = list() # var how I want to use in function call knowledge_movies = list() # var how I want to use in function call biography_movies = list()

我尝试使用var的名称动态调用函数,但我不知道这是否可行,比如:

fight_movies = list() # var how I want to use in function call
win_movies = list() # var how I want to use in function call
knowledge_movies = list() # var how I want to use in function call
biography_movies = list() # var how I want to use in function call

for genre in genres:
    .... Ommited #\/\/\/\/\/\/ Here is where I call the function
    write_jsonl(genre + '_movies', genre, rating, title, genre) #here is the call of the function


def write_jsonl(movie_list, genre, rating, title, json_name):
    dict = {'title': title, 'genre': genre, 'rating': rating}
    movie_list.append(dict)
    # print(action_movies)
    with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
        writer.write(movie_list)
我试图以列表的形式动态传递变量名,但我不确定在python中是否可行,有什么建议吗

Error: Traceback (most recent call last):
  File "bucky.py", line 58, in <module>
    web_crawling()
  File "bucky.py", line 34, in web_crawling
    write_jsonl(genre + '_movies', genre, rating, title, genre)
  File "bucky.py", line 52, in write_jsonl
    movie_list.append(dict)
AttributeError: 'str' object has no attribute 'append'
错误:回溯(最近一次呼叫最后一次):
文件“bucky.py”,第58行,在
网络爬网
文件“bucky.py”,第34行,在web_爬行中
写作(体裁+电影、体裁、评级、标题、体裁)
文件“bucky.py”,第52行,在write_jsonl中
电影列表。附加(dict)
AttributeError:“str”对象没有属性“append”

您可以在/like中找到您的变量


正如大多数人所建议的那样,使用字典,然后如果你想,我认为你打算让它做的是,然后将字典存储在一个列表中。然而,您的代码显示了一个问题,您传递了一个字符串,我相信您打算将其作为一个列表

def write_jsonl(movie_list, genre, rating, title, json_name):
    d= {'title': title, 'genre': genre, 'rating': rating}
    movie_list.append(d) #<-- movie_list based on your traceback is a str
    # print(action_movies)
    with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
        writer.write(movie_list)
更好的方法是在字典中按类型存储标题列表,您可以使用Python标准库中的
defaultdict
数据模型来实现这一点

from collections import defaultdict
movie_list = defaultdict(list)

def write_jsonl(movie_list, genre, rating, title, json_name):
    d= {'title': title, 'genre': genre, 'rating': rating}
    movie_list['{}_movies'.format(genre)].append(d)
    # print(action_movies)
    with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
        writer.write(movie_list)

movie_list
>>defaultdict(list,
            {'Crime_movies': [{'title': 'Godfather',
               'genre': 'Crime',
               'rating': '10'}]})

movie_list['Crime_movies']
>>[{'title': 'Godfather', 'genre': 'Crime', 'rating': '10'}]
也不要使用内置方法或保留名称作为变量,我将您的
dict
变量替换为just
d

只需使用字典即可:

genres_dict = {k: [] for k in ('fight', 'win', 'knowledge', 'biography')}

for genre in genres:
    write_jsonl(genres_dict[genre], genre, rating, title, genre)
不建议使用可变数量的变量


相关:。

不要这样做。使用字典。是的,你是对的,菲利普·姆林纳斯基,但我相信他试图做的是动态地传递这个函数,这样他就不必多次调用函数,为每种类型创建多个ifs
from collections import defaultdict
movie_list = defaultdict(list)

def write_jsonl(movie_list, genre, rating, title, json_name):
    d= {'title': title, 'genre': genre, 'rating': rating}
    movie_list['{}_movies'.format(genre)].append(d)
    # print(action_movies)
    with jsonlines.open(json_name+'.jsonl', mode='w') as writer:
        writer.write(movie_list)

movie_list
>>defaultdict(list,
            {'Crime_movies': [{'title': 'Godfather',
               'genre': 'Crime',
               'rating': '10'}]})

movie_list['Crime_movies']
>>[{'title': 'Godfather', 'genre': 'Crime', 'rating': '10'}]
genres_dict = {k: [] for k in ('fight', 'win', 'knowledge', 'biography')}

for genre in genres:
    write_jsonl(genres_dict[genre], genre, rating, title, genre)