Repository: yt-dlp/yt-dlp
File: yt_dlp/extractor/orf.py (Python)

Code before:
                    fmt, subs = self._extract_mpd_formats_and_subtitles(manifest_info.get('src'), display_id, fatal=False)
                else:
                    continue
                formats.extend(fmt)
                self._merge_subtitles(subs, target=subtitles)

        return {
            'id': video_id or api_json.get('id'),
            'formats': formats,
            'subtitles': subtitles,
            **traverse_obj(api_json, {
                'duration': ('duration_second', float_or_none),
                'title': (('title'), ('headline')),
                'description': (('description'), ('teaser_text')),
                'media_type': 'video_type'
            })
        }

    def _real_extract(self, url):
        video_id, display_id = self._match_valid_url(url).group('id', 'slug')
        webpage = self._download_webpage(url, display_id)
        json_ld_data = self._search_json_ld(webpage, display_id)

        api_data = self._call_api(video_id, display_id)

        return merge_dicts(api_data, {
            'id': video_id,
            'title': (json_ld_data.get('title')
                      or self._html_search_meta(['og:title', 'twitter:title'], webpage)),
            'description': (json_ld_data.get('description')
                            or self._html_search_meta(['description', 'og:description', 'twitter:description'], webpage)),
            **traverse_obj(json_ld_data, {
                'duration': ('duration', {float_or_none}),
                'timestamp': ('timestamp', int_or_none),
                'thumbnails': 'thumbnails'
            })
        })


Review comment (suggestion):
```suggestion
        return merge_dicts(self._call_api(video_id, display_id), {
```

but we don't even really need `merge_dicts` here, since `traverse_obj` will not return keys paired with `None` values. We could just unpack `**self._call_api(video_id, display_id)` after the unpacked json ld traversal

Code after:
                    fmts, subs = self._extract_mpd_formats_and_subtitles(
                        manifest_url, display_id, fatal=False, mpd_id='dash')
                else:
                    continue
                formats.extend(fmts)
                self._merge_subtitles(subs, target=subtitles)

        return {
            'id': video_id,
            'formats': formats,
            'subtitles': subtitles,
            **traverse_obj(api_json, {
                'duration': ('duration_second', {float_or_none}),
                'title': (('title', 'headline'), {str}),
                'description': (('description', 'teaser_text'), {str}),
                'media_type': ('video_type', {str}),
            }, get_all=False),
        }

    def _real_extract(self, url):
        video_id, display_id = self._match_valid_url(url).group('id', 'slug')
        webpage = self._download_webpage(url, display_id)

        return {
            'id': video_id,
            'title': self._html_search_meta(['og:title', 'twitter:title'], webpage, default=None),
            'description': self._html_search_meta(
                ['description', 'og:description', 'twitter:description'], webpage, default=None),
            **self._search_json_ld(webpage, display_id, fatal=False),
            **self._extract_video(video_id, display_id),
        }